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

调用动态库中的函数

main.cpp

#include 
#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 
using namespace std;
void printHello()
{
    cout<<"0004 version Hello"<

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的路径变了。

用处:

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

你可能感兴趣的:(C++,QT实用笔记,动态库连接路径)