所以关于发生的事情的一些背景故事。我目前正在构建许多东西(包括 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 中。