OS X 10.8上的gcc链接/ Segfault问题

Fre*_*urn 1 macos linker gcc

对于正在发生的事情,这是一个小故事.我目前正在构建一些东西(包括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.(从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
Run Code Online (Sandbox Code Playgroud)

libluajit-5.1.2.0.0.dylib,所有相应的符号链接都在install/lib中.lua包含文件在install/include中.这里出了什么问题?我很困惑,想要开始工作.我宁愿摔跤代码而不是摔跤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
Run Code Online (Sandbox Code Playgroud)

如果我做了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)
Run Code Online (Sandbox Code Playgroud)

尽管libluajit在./install/lib中.

小智 6

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

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