如何在gcc中链接到我自己的库?

时间:2016-10-25 07:29:04

标签: c++ c linux gcc

构建可执行文件的命令:
g++ -I../include/redis -L../lib/redis redis.cpp -o redis -lhiredis

说明
我在libhiredis.so中有../lib/redis/。在/usr/local/lib/hiredis13/中,有libhiredis.solibhiredis.so.0.13,此libhiredis.so是指向libhiredis.so.0.13的符号链接。然后我ldd redis,这是结果:

linux-vdso.so.1 =>  (0x00007ffd227f7000)  
libhiredis.so.0.13 => not found  
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f7ebca0d000)  
libm.so.6 => /lib64/libm.so.6 (0x00007f7ebc70b000)  
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f7ebc4f5000)  
libc.so.6 => /lib64/libc.so.6 (0x00007f7ebc132000)  
/lib64/ld-linux-x86-64.so.2 (0x00007f7ebcd23000)

Gcc应链接到libhiredis.so中的../lib/redis/,我是对吗?

1 个答案:

答案 0 :(得分:3)

您的图书馆可能有SONAMElibhiredis.so.0.13),因此程序会记录它而不是文件名。然后,在运行时,在通常的目录中搜索SONAME

您的图书馆位于/usr/local/lib/hiredis13/,这不是通常的目录。解决方案是以下之一:

  • /usr/local/lib/hiredis13/etc/ld.so.conf中添加/etc/ld.so.conf.d/*目录,然后重新运行ldconfig
  • 运行程序时导出环境变量LD_LIBRARY_PATH=/usr/local/lib/hiredis13
  • 使用-rpath链接器选项。