【问题标题】:relative paths for shared libraries共享库的相对路径
【发布时间】:2011-08-23 16:56:09
【问题描述】:

我正在使用 JNI。我有一个使用两个共享库的包装库(wrapper.so):one.so 和 two.so

一切正常。所有 *.so 都在程序文件夹内的 lib 文件夹中。

问题是,如果我将此文件夹复制到另一台计算机,我会遇到链接问题。

假设我在机器 user2 (/home/user2/program) 上运行它,并在机器 user1 (/home/user1/program) 上编译,我得到链接错误:

UnsatisfiedLinkError: /home/user1/program/lib/one.so

如何将库链接到父程序文件夹(例如,搜索 this_foler/lib ??

我正在编译:

g++ -c -o src/wrapper.o src/wrapper.c
g++ -shared -o wrapper.so src/wrapper.o one.so two.so

【问题讨论】:

    标签: linker g++ java-native-interface shared


    【解决方案1】:

    如何将库链接到父程序文件夹

    取决于您的操作系统。在 Linux 上,这可能会起作用:

    g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so
    

    注意:单引号在上述命令中是重要的

    【讨论】:

    • @Rockskull 如果答案有效,你应该接受它,投票赞成,或两者兼而有之。如果你不这样做,有些人下次可能不会费心回答你的问题。
    • 对不起。堆栈溢出的新手。我接受它,但我不能投票。
    • @EmployedRussian 你知道intel编译器对应的命令吗?谢谢。
    • @xslittlegrass -Wl,... 语法非常通用,icc 也应该支持,至少据我所知computing.llnl.gov/tutorials/linux_clusters/man/icc.txt
    • 我无法通过 makefile 使其工作。有 -Wl,-rpath=RIGIN/../Lib 输出。使用 double $$ 为我解决了这个问题。因此,如果这是在 makefile 中,请使用 -Wl,-rpath='$$ORIGIN'
    猜你喜欢
    • 2018-11-06
    • 2019-02-03
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多