@executable_path 不工作
@executable_path not working
我已经安装了SDL2。我可以 link 我的程序
clang++ -lSDL2 -lv8 main.o test.o -o nano8
但是,出于分发原因,我想将 SDL2 与二进制文件一起赠送,因此我将 libSDL2-2.0.0.dylib 复制到 /myapp/lib/libSDL2-2.0.[=24 下=]
至于文档,@executable_path 应该允许我 link 那个 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的搜索路径?
这很难做到正确。
我假设 /myapp
可以在文件系统中的任何位置,并且想从 @executable_path/../lib/libSDL2.dylib
加载库?
如果是这样,您必须使用 运行 路径 并在链接期间复制和修改库(这需要在每次构建时完成):
cp /usr/local/lib/libSDL2.dylib build_dir/lib
.
使用 install_name_tool
:
更改 .dylib
的 安装名称
install_name_tool -change /usr/local/lib/libSDL2.dylib @rpath/libSDL2.dylib build_dir/lib/libSDL2.dylib
Link 反对 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
中,并提供要安装到 /usr/local/lib
中的任何 .dylib
。这更好,因为 /usr/local
是用户二进制文件的地方,你不需要上面的 faff。
我已经安装了SDL2。我可以 link 我的程序
clang++ -lSDL2 -lv8 main.o test.o -o nano8
但是,出于分发原因,我想将 SDL2 与二进制文件一起赠送,因此我将 libSDL2-2.0.0.dylib 复制到 /myapp/lib/libSDL2-2.0.[=24 下=] 至于文档,@executable_path 应该允许我 link 那个 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的搜索路径?
这很难做到正确。
我假设 /myapp
可以在文件系统中的任何位置,并且想从 @executable_path/../lib/libSDL2.dylib
加载库?
如果是这样,您必须使用 运行 路径 并在链接期间复制和修改库(这需要在每次构建时完成):
cp /usr/local/lib/libSDL2.dylib build_dir/lib
.使用
更改install_name_tool
:.dylib
的 安装名称install_name_tool -change /usr/local/lib/libSDL2.dylib @rpath/libSDL2.dylib build_dir/lib/libSDL2.dylib
Link 反对
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
中,并提供要安装到 /usr/local/lib
中的任何 .dylib
。这更好,因为 /usr/local
是用户二进制文件的地方,你不需要上面的 faff。