编译C++中动态链接库,存在运行路径问题
Compiling Dynamically Linked Library in C++ with Run Path Issue
我正忙于使用以下 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
的库。
相关文章:
- 获取当前正在运行的 exe 名称(不是路径)
- 如何使特定程序仅从安装的路径运行以避免DLL劫持
- 如何从 CLion 的运行窗口中删除程序项目路径
- 使用运行路径进行 C++ 辅助依赖项解析
- 如何在测试运行期间获取资源的目录路径
- 我最近更改了编译器路径以运行 c++ 代码,但现在我无法运行任何 python 代码。我该如何解决这个问题?
- 如何在C++(JNI)中设置正在运行的JVM的类路径
- 运行可执行文件时找不到共享库,即使共享库存在于指定的路径中
- 崇高文本 3 - 在终端中编译并运行 C++ 程序(路径包含空格)
- QT;我如何在运行时存储通往变量的资源路径
- 在 CreateProcess 的路径中使用 SHGetKnownFolderPath 来运行程序
- 运行 c++ 程序时搜索的路径错误
- 运行调试器Visual Studio时ARGV中的路径
- 运行正则表达式时未选中的异常 - 从文件路径获取不带扩展名的文件名
- 编译C++中动态链接库,存在运行路径问题
- 使用 C/C++ 获取正在运行的 PID 的完整路径,而无需使用系统功能 (Linux)
- RegSetValueEx-路径错误,64位,以管理员身份运行
- 从C++代码运行JVM并设置类路径
- OSX 运行时动态库路径搜索
- 将QDir::rootPath()更改为程序运行路径