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

时间:2013-02-04 01:41:32

标签: macos gcc linker

对于正在发生的事情,这是一个小故事。我目前正在构建一些东西(包括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。

2 个答案:

答案 0 :(得分:6)

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

段错误是因为没有关注OSX / x64的LuaJIT embedding instructions

答案 1 :(得分:0)

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

  1. 安装macports
  2. $ xcode-select -switch /Applications/Xcode.app/Contents/Developer
  3. $ sudo port selfupdate
  4. $ sudo port install libsdl_image luajit
  5. 这将安装您请求的端口和任何依赖项。

    然后,您可以专注于您的项目,知道合格的团队正在关注所有其他事情。