对于正在发生的事情,这是一个小故事。我目前正在构建一些东西(包括SDL,SDL_image等),并将它们连接在一个可执行文件中,并手动完成。我正在制作我自己的自定义makefile,只使用命令行,而不是Xcode。 (我不喜欢Xcode)到目前为止,我已经成功完成了所有这些,但我想开始将Lua脚本放在我的代码之上,所以我现在正在编译luajit2.0并尝试将其链接到其中。
然而,虽然SDL工作正常,我可以打开一个带有加载图像的窗口,但luajit拒绝正确链接。它给了我dyld:库没有加载...消息,引用/ usr / local / lib,即使它不仅不存在,但gcc在命令行上给了-L到保存我内置的文件夹luajit。在我的二进制文件上使用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包含文件在install / include中。这里出了什么问题?我很困惑,想要开始工作。我宁愿摔跤代码而不是摔跤gcc和OS X.
编辑:根据请求,我在当前“Segmentation fault: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游戏,我得到了:
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。
答案 0 :(得分:6)
共享库有一个安装路径。这意味着必须使用正确的PREFIX进行构建和安装,请参阅安装文档。或者考虑与静态LuaJIT库链接 - 从非系统位置加载动态库是一种蠕虫。
段错误是因为没有关注OSX / x64的LuaJIT embedding instructions。
答案 1 :(得分:0)
为什么不让自己轻松生活并使用Macports:
$ xcode-select -switch /Applications/Xcode.app/Contents/Developer
$ sudo port selfupdate
$ sudo port install libsdl_image luajit
这将安装您请求的端口和任何依赖项。
然后,您可以专注于您的项目,知道合格的团队正在关注所有其他事情。