ner*_*ehl 9 c++ gcc g++ autotools ld
我的系统4.6.2和4.7.0上安装了两个版本的GCC.我正在运行Fedora Core 16.
安装4.6.2并安装/usr/bin4.7.0 /home/nerozehl/local/bin.对于C++库和运行时也被编译和安装了/home/nerozehl/local/lib和/home/nerozehl/local/lib64.
我还安装了两个版本的Boost,其中包含/usr/lib64和/home/nerozehl/local/lib.(分别提升1.47.0和1.49.0)
我遇到的问题是g ++/ld链接到默认库,而不是新的库/home/nerozehl/local.我configure用来生成Makefile,我这样称呼它:
CXX=g++47 CXXFLAGS="-g -O0 -pg" LDFLAGS="-L/home/nerozehl/local/lib" ./configure --prefix=/home/nerozehl/local
Run Code Online (Sandbox Code Playgroud)
住在哪g++47里/home/nerozehl/local/bin(在我的$PATH).
当我编译时,一切都很好,并且使用了较新的标题,但是当我检查它链接的内容时:
ldd source/noes
linux-vdso.so.1 => (0x00007fffebfff000)
libboost_filesystem-mt.so.1.47.0 => /usr/lib64/libboost_filesystem-mt.so.1.47.0 (0x0000003c6a800000)
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x0000003c6a400000)
libboost_program_options-mt.so.1.47.0 => /usr/lib64/libboost_program_options-mt.so.1.47.0 (0x0000003c6ac00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c6dc00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c68c00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c69c00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c68800000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c69000000)
librt.so.1 => /lib64/librt.so.1 (0x0000003c69800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c68400000)
Run Code Online (Sandbox Code Playgroud)
对于我的生活,我无法弄清楚如何强制g ++/ld/configure使用我的新库.任何帮助,将不胜感激.
Chr*_*odd 10
ldd没有告诉你可执行文件链接的内容 - 它告诉你可执行文件在运行时会加载哪些共享对象.如果您希望它在运行时从/ home/nerozehl加载,您需要执行以下操作之一:
设置LD_LIBRARY_PATH为在运行程序时包含/ home/nerozehl/local/lib
将/ home/nerozehl/local/lib添加到ld.so.conf,这样每个人都可以使用它.但是只适用于使用ld.so.conf的系统(例如linux).
将程序与-Wl,-rpath,/home/nerozehl/local/lib.但是,仅适用于使用ELF的系统或支持它的其他可执行格式.它还将路径硬编码到可执行文件中,这有点脆弱 - 如果将可执行文件移动到另一台计算机或重新安排文件系统,它可能会中断.
| 归档时间: |
|
| 查看次数: |
6163 次 |
| 最近记录: |