用运行路径问题编译C ++中的动态链接库

时间:2014-02-27 21:05:17

标签: c++ dll compiler-construction g++

我正忙着尝试使用以下make文件编译和链接c ++程序

driver.so:driver.cpp
        g++ -c driver.cpp -o driver.so 
        g++ -L/tokenlib/libtokenlib.so driver.so -o linked

但是我收到了错误

g++ -c driver.cpp -o driver.so 
g++ -L/tokenlib/libtokenlib.so driver.so -o linked
driver.so: In function `main':
driver.cpp:(.text+0x9): undefined reference to `tokenlib::acquire_token()'
collect2: error: ld returned 1 exit status
make: *** [driver.so] Error 1

我的文件层次结构是

/root
    makefile
    driver.cpp
    /tokenlib
        libtokenlib.so

我被告知在我的g ++争论中添加-Wl,-rpath =。/ tokenlib会解决问题,所以我尝试了这个

    driver.so:driver.cpp
        g++ -c driver.cpp -o driver.so -Wl,-rpath=./tokenlib 
        g++ -L/tokenlib/libtokenlib.so driver.so -o linked -Wl,-rpath=./tokenlib

但它仍无效。

我是一个完整的新手,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

链接器通常引用.a(存根)库,而不引用.so文件!
-L选项指定路径,lnker应考虑到这些路径 -l<mystuff>选项尝试从libmystuff.a选项的任何给定路径或编译器内部库搜索路径中解析名为-L的库。

相关问题