1

所以关于发生的事情的一些背景故事。我目前正在构建许多东西(包括 SDL、SDL_image 等)并将它们全部链接到一个可执行文件中,然后手动完成。我正在制作自己的自定义 makefile,并且只使用命令行,而不是 Xcode。(我不喜欢 Xcode) 到目前为止,我已经成功完成了这一切,但我想开始将 Lua 脚本放在我的代码之上,所以我现在正在编译 luajit2.0 并尝试将其链接进去。

然而,虽然 SDL 工作正常,我可以打开一个加载图像的窗口,但 luajit 拒绝正确链接。它给了我 dyld: Library not loaded... 消息,引用 /usr/local/lib 即使它不仅在那里不存在,而且 gcc 在命令行上被赋予 -L 到保存我构建的文件夹卢吉特。在我的二进制文件上使用 otool -L 会给出该目录,即使它甚至不存在于那里。

在尝试用谷歌搜索这个问题时,我遇到了一个给我这个命令的解决方案:install_name_tool -id `pwd`/install/lib/libluajit-5.1.dylib install/lib/libluajit-5.1.dylib. (来自 SO)重建二进制文件并在其上使用 otool 后,我现在看到了该库的正确目录。然而,现在,虽然它没有给我 dyld 错误,但在我使用 luajit 函数的那一刻它给了我一个段错误。(特别是luaL_newstate)

构建我的二进制文件的命令如下:

gcc -g -Wall -arch x86_64 -framework Cocoa -Iinstall/include -Linstall/lib src/native/main.c -lluajit-5.1.2.0.0 -lSDL2_image -lSDL2 -lSDL2main -lpng -lz -o game

libluajit-5.1.2.0.0.dylib,所有对应的符号链接都在 install/lib 中。lua 包含文件在安装/包含中。这里出了什么问题?我很困惑,只想让它开始工作。我宁愿与代码搏斗,也不愿与 gcc 和 OS X 搏斗。

编辑:根据请求,在我得到的当前“分段错误:11”错误之前我得到的上一个错误基本上是这样的:

dyld: Library not loaded: /usr/local/lib/luajit-5.1.2.dylib
  Referenced from: <my application, forgot this exact bit>
  Reason: image not found

如果我做了 otool -L game 我得到了:

MacBook-Air:old freezerburn$ otool -L game
game:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
    /usr/local/lib/libluajit-5.1.2.dylib (compatibility version 2.0.0, current version 2.0.0)
    /Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libSDL2_image-1.2.0.dylib (compatibility version 9.0.0, current version 9.5.0)
    /Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libSDL2-2.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libpng15.15.dylib (compatibility version 30.0.0, current version 30.0.0)
    /Users/freezerburn/Dropbox/Code/lua_engine/old/install/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

即使 libluajit 在 ./install/lib 中。

4

2 回答 2

6

共享库有一个安装路径。这意味着您必须使用正确的 PREFIX 构建和安装,请参阅安装文档。或者考虑与静态 LuaJIT 库链接——从非系统位置加载动态库是一罐蠕虫。

段错误是由于没有遵循 OSX/x64 的LuaJIT 嵌入指令

于 2013-02-04T09:15:18.477 回答
0

为什么不让自己的生活变得轻松并使用Macports

  1. 安装 macports
  2. $ xcode-select -switch /Applications/Xcode.app/Contents/Developer
  3. $ sudo port selfupdate
  4. $ sudo port install libsdl_image luajit

这将安装您请求的端口和任何依赖项。

然后,您可以专注于您的项目,并且知道一个合格的团队正在处理所有其他事情。

于 2013-02-04T09:23:15.527 回答