编译C++中动态链接库,存在运行路径问题

Compiling Dynamically Linked Library in C++ with Run Path Issue

本文关键字:运行 路径 问题 存在 C++ 动态链接库 编译      更新时间:2023-10-16

我正忙于使用以下 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

但它仍然不起作用。

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

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