我已经安装了SDL2。我可以用
链接我的程序clang++ -lSDL2 -lv8 main.o test.o -o nano8
但是,出于分配原因,我想让SDL2放弃二进制文件,因此我在/myapp/lib/libSDL2-2.0.0.dylib下复制了libSDL2-2.0.0.dylib 至于文档,@ executable_path应该允许我链接到那个dylib而不是/ usr / local / lib中的那个,但如果我运行
clang++ @executable_path/lib/libSDL2-2.0.0.dylib -lv8 main.o test.o -o nano8
我收到错误
clang: error: no such file or directory: '@executable_path/lib/libSDL2-2.0.0.dylib'
如何设置dylib的搜索路径?
答案 0 :(得分:1)
这是一个很难实现的痛苦。
我假设/myapp
可以在文件系统中的任何位置,并且想要从@executable_path/../lib/libSDL2.dylib
加载库?
如果是这样,您必须使用运行路径并在链接期间复制和修改库(这需要在每次构建时完成):
cp /usr/local/lib/libSDL2.dylib build_dir/lib
。使用.dylib
更改install_name_tool
的安装名称:
install_name_tool -change /usr/local/lib/libSDL2.dylib @rpath/libSDL2.dylib build_dir/lib/libSDL2.dylib
链接build_dir/lib/libSDL2.dylib
并在链接期间设置rpath
:
cd build_dir/bin
clang++ obj_dir/main.o obj_dir/test.o -o nano8 -L ../lib -lv8 -lSDL2 -Xlinker -rpath -Xlinker "@executable_path/../lib"
我没有对此进行过测试,可能会出现错误。使用otool -L
检查二进制文件和库中的库引用,以便回答此问题。
更清洁的方式:
将二进制文件安装到/usr/local/bin
,并将.dylib
安装到/usr/local/lib
。这是更好的,因为/usr/local
是用户二进制文件的地方,你不需要上面的faff。