【发布时间】:2013-02-04 01:41:32
【问题描述】:
所以关于发生了什么的一些背景故事。我目前正在构建许多东西(包括 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。 (from 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 中。
【问题讨论】:
-
在询问错误消息时发布确切的错误消息总是明智的...
-
我当前的错误消息是,字面意思是:分段错误:11。我认为说我有段错误就足够了。如果你愿意,我可以编辑它。