C++设置动态库链接库的路径,解决ldd找不到动态库的问题

调用动态库中的函数

main.cpp

#include <iostream>
#include "libTest.h"
using namespace std;
int main()
{
    cout << "Hello World!" << endl;
    printHello();
    return 0;
}

生成的库文件是chooseLib

.pro

LIBS += -llibTest

libTest.h 和libTest.cpp

libTest.h

#ifndef LIBTEST_H_
#define LIBTEST_H_
void printHello();
#endif

libTest.cpp

#include "libTest.h"
#include <iostream>
using namespace std;
void printHello()
{
    cout<<"0004 version Hello"<<endl;
}

CMakeList.txt

cmake_minimum_required(VERSION 3.5)

project(libTest LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#add_executable(libTest main.cpp)
add_library(libTest SHARED libTest.cpp)

将liblibTest.so分别放入系统库目录/usr/lib下和chooseLib所在目录的lib下。在终端中查看chooseLib的访问路径.

$ldd chooseLib

linux-vdso.so.1 (0x00007ffff73fa000)
liblibTest.so => /lib/liblibTest.so (0x00007f4f87e56000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f87c74000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f87a82000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f87933000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f87e85000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f87918000)

liblibTest.so的访问路径是lib(与/usr/lib是同一个目录)。

然后我输入了命令:

$LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/zcm/projects/build-chooseLib-Desktop_Qt_6_3_2_GCC_64bit-Debug/lib

$export LD_LIBRARY_PATH

两句是设置chooseLib的访问库路径,第二句不能缺。

然后再看chooseLib的访问路径

$ldd chooseLib 

linux-vdso.so.1 (0x00007ffd303d6000)
liblibTest.so => /home/zcm/projects/build-chooseLib-Desktop_Qt_6_3_2_GCC_64bit-Debug/lib/liblibTest.so (0x00007f1bea2e5000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1bea0e0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1be9eee000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1be9d9f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1bea2f1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1be9d84000)

可以看到liblibTest.so的路径变了。

用处:

发布程序时,可能程序依赖的库文件在新环境中有同名的,这时需要指定访问哪个库,通常是指定到发布程序自带的库,这样可以避免因版本不对导致的错误。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值