在不使用完整路径的情况下创建共享库链接
cmake link to shared libraries without using full path
我有以下CMakeLists.txt:
set( PROJECT_LINK_LIBS lib1.so lib2.so )
link_directories( path/to/libs ) # lib1.so and lib2.so are there.
add_library( ${PROJECT_NAME} SHARED ${PROJECT_SOURCES} )
target_link_libraries( ${PROJECT_NAME} ${PROJECT_LINK_LIBS} )
编译和链接都很好
但是当我这样做的时候:
ldd -d mylib.so
我:
-
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf529b000)
-
linux-gate.so.1 => (0xf777a000)
-
/lib/ld-linux.so.2 (0xf777b000)
-
lib1.so => /path/to/libs/lib1.so (0xf56a2000)
-
lib2.so => /path/to/libs/lib2.so (0xf548f000)
我的问题是:
- 如何删除/path/to/libs/和5。与LD_LIBRARY_PATH有关?
- 自动回答:我得到什么意思1。搜索lib .so。在那条路上。但是2呢?和3。?
locate linux-gate.so.1
没有给出。为什么3。没有=>符号?(在这里找到答案)
Ok找到答案了:
set( CMAKE_SKIP_BUILD_RPATH true )
你有一个实际的问题,还是你只是混淆了ldd
的输出?回答您的问题:如果您在Linux上成功编译并链接了库,那么将存储到外部库的完整路径。如果你现在复制或安装(使用CMake)你的库,完整的库路径将被剥离。现在,您必须确保LD_LIBRARY_PATH
提供了正确的路径,或者外部库位于与库所在的文件夹中。
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 是否可以在没有真实文件的情况下创建 ifstream
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 在没有默认构造函数的情况下创建的派生对象
- 如何在没有侦听器的情况下创建 TCP 连接?
- 如何在不使用new的情况下保持在其他对象中创建的对象存活?
- 如何在不使用 std::tm 和 mktime() 的情况下为给定日历日期创建 chrono::time_point 对
- 我可以在不创建项目的情况下在Visual Studio 2019中编译和运行HelloWorld.cpp吗?
- 如何在不重新创建现有文件的情况下写入.txt文件
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- C ++:如何在不创建对象的情况下在主函数中调用方法
- 在不创建新节点的情况下实现带有映射的trie
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 如何在不使用宽字符串的情况下创建目录C++?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 变量如何在不创建对象的情况下获得内存
- 在不创建子矩阵的情况下计算C++矩阵的行列式
- 如何在不以不同方式创建每个向量的情况下制作 2-D 向量列表?