Nic*_*lko 3 c++ linux linker gcc poco
我正在POCO项目网站上的第一步教程,我已经在我的主目录下成功构建了库(Debian Linux,2.6.26,gcc 4.3.2)
~/Development/POCO
共享库位于
~/Development/POCO/lib/Linux/x86_64/lib
我的问题是,我构建的依赖于这些库的任何应用程序只能从共享库目录运行.
~/Development/POCO/lib/Linux/x86_64$ ldd ~/Development/Cloud/DateTimeSample/bin/Linux/x86_64/DateTime
linux-vdso.so.1 => (0x00007fffe69fe000)
libPocoFoundation.so.6 (0x00007fa8de44f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa8de233000)
libdl.so.2 => /lib/libdl.so.2 (0x00007fa8de02f000)
librt.so.1 => /lib/librt.so.1 (0x00007fa8dde26000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa8ddb1a000)
libm.so.6 => /lib/libm.so.6 (0x00007fa8dd897000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa8dd680000)
libc.so.6 => /lib/libc.so.6 (0x00007fa8dd32d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa8de7e0000)
从这个目录运行DateTime可以正常工作.然而
~/Development/Cloud/DateTimeSample/bin/Linux/x86_64$ ldd DateTime
linux-vdso.so.1 => (0x00007fff24dfe000)
libPocoFoundation.so.6 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00007ffc1c7dd000)
libdl.so.2 => /lib/libdl.so.2 (0x00007ffc1c5d9000)
librt.so.1 => /lib/librt.so.1 (0x00007ffc1c3d0000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007ffc1c0c4000)
libm.so.6 => /lib/libm.so.6 (0x00007ffc1be41000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007ffc1bc2a000)
libc.so.6 => /lib/libc.so.6 (0x00007ffc1b8d7000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffc1c9f9000)
所以从任何其他目录运行可执行文件导致
error while loading shared libraries: libPocoFoundation.so.6: cannot open shared object file: No such file or directory
查看make进程的输出,正确指定了目录
g++ [blah] -L/home/npalko/Development/POCO/lib/Linux/x86_64
-lPocoFoundation
我试过设定
LD_LIBRARY_PATHRun Code Online (Sandbox Code Playgroud) 至 /home/npalko/Development/POCO/lib/Linux/x86_64,但它没有改变任何东西.任何帮助将不胜感激!
如果您不想处理LD_LIBRARY_PATH变量,可以将链接器-rpath选项添加到gcc命令行.在您的情况下,这将是:
gcc ... -Wl,-rpath=/home/npalko/Development/POCO/lib/Linux/x86_64
Run Code Online (Sandbox Code Playgroud)
这有效地硬编码了可执行文件中的路径,因此它可能适用于您的目的,也可能不适用.
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |