我创建了一个简单的SSCCE示例项目来演示我的整体设置。如有需要,请随意查看和编译(
git clone https://github.com/calebwherry/cmake-SO-question-main --recursive && cd cmake-SO-question-main && mkdir build && cd build && cmake .. && make && cd src/app/testApp && ldd testApp
)。每当我在可执行文件和库上运行
ldd
时,都会得到以下输出: linux-vdso.so.1 => (0x00007fff8b5a2000)
libTestLib.so => /home/jwherry3/repos/cmake-superprj-main-test/build/src/lib/TestLib/libTestLib.so (0x00007f592da57000)
../../lib/libExtLib.so (0x00007f592d855000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f592d539000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f592d2b7000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f592d0a0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f592cd14000)
/lib64/ld-linux-x86-64.so.2 (0x00007f592dc5a000)
我尝试了各种处理RPATHS的方法,但无法正确链接ExtLib。项目本地的库(
libTestLib.so
)链接得很好。我还尝试设置LD_LIBRARY_PATH
来覆盖运行应用程序时的相对路径,但即使我这样做,它仍然找不到库。我想,因为它是相对的,所以它不遵循正常的链接顺序?结果是,除非我在它所在的目录中,否则二进制文件将无法运行。我觉得在使用ExternalProject创建依赖项方面,我正在做一些非常愚蠢的事情,这就是我的问题,但我已经头痛了3天,没有任何进展。系统设置:Debian Wheezy 64位,CMake 3.0.2,g++-4.9.2。