gpt4 book ai didi

c++ - 即使我修改了 LD_LIBRARY_PATH,也找不到我的共享库

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:08 26 4
gpt4 key购买 nike

我正在疯狂地尝试创建和使用一个简单的共享库。尝试运行我的程序 (my_prog) 时,找不到共享库。

代码:

生成文件

my_test: my_lib my_prog
@echo Done

my_lib: my_lib.cpp
@echo Creating my_lib...
g++ -Wall -pedantic -fPIC -c my_lib.cpp
g++ -shared -Wl,-soname,libmy_lib.so.0 -o libmy_lib.so.0.1 my_lib.o
ln -fs libmy_lib.so.0.1 libmy_lib.so.0
ln -fs libmy_lib.so.0 libmy_lib.so
set LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(PWD)

my_prog: my_test.cpp
@echo Creating my_prog...
g++ -Wall -pedantic -L. $^ -lmy_lib -o my_test

clean:
rm -f *.o my_test libmy_lib*

我的库.h

#ifndef MY_LIB_H
#define MY_LIB_H

#include <string>

class MyLib
{
public:
MyLib() {}
std::string get_string() const;
};

#endif

我的库.cpp

#include "my_lib.h"

std::string MyLib::get_string() const
{
return std::string("Testing...\n");
}

我的测试.cpp

#include "my_lib.h"
#include <stdio.h>

int main()
{
MyLib lib;
fprintf(stdout, "%s", lib.get_string().c_str());
return 0;
}

创造一切:

my_pc [6:28pm] [own_useful_programs/mom_visulaizer/my_test] => ll
total 24
drwxr-xr-x 2 jocke lteli 4096 Jan 20 18:28 ./
drwxr-xr-x 3 jocke lteli 4096 Jan 20 17:54 ../
-rw-r--r-- 1 jocke lteli 450 Jan 20 18:18 Makefile
-rw-r--r-- 1 jocke lteli 103 Jan 20 18:09 my_lib.cpp
-rw-r--r-- 1 jocke lteli 139 Jan 20 18:09 my_lib.h
-rw-r--r-- 1 jocke lteli 137 Jan 20 18:06 my_test.cpp
my_pc [6:28pm] [own_useful_programs/mom_visulaizer/my_test] => make
Creating my_lib...
g++ -Wall -pedantic -fPIC -c my_lib.cpp
g++ -shared -Wl,-soname,libmy_lib.so.0 -o libmy_lib.so.0.1 my_lib.o
ln -fs libmy_lib.so.0.1 libmy_lib.so.0
ln -fs libmy_lib.so.0 libmy_lib.so
set LD_LIBRARY_PATH=/app/openssl/1.0.0/RHEL64/lib64:/app/openmotif/2.3.1/lib:/home/jocke/own_useful_programs/mom_visulaizer/my_test
Creating my_prog...
g++ -Wall -pedantic -L. my_test.cpp -lmy_lib -o my_test
Done
my_pc [6:28pm] [own_useful_programs/mom_visulaizer/my_test] => ll
total 48
drwxr-xr-x 2 jocke lteli 4096 Jan 20 18:28 ./
drwxr-xr-x 3 jocke lteli 4096 Jan 20 17:54 ../
-rw-r--r-- 1 jocke lteli 450 Jan 20 18:18 Makefile
lrwxrwxrwx 1 jocke lteli 14 Jan 20 18:28 libmy_lib.so -> libmy_lib.so.0*
lrwxrwxrwx 1 jocke lteli 16 Jan 20 18:28 libmy_lib.so.0 -> libmy_lib.so.0.1*
-rwxr-xr-x 1 jocke lteli 7098 Jan 20 18:28 libmy_lib.so.0.1*
-rw-r--r-- 1 jocke lteli 103 Jan 20 18:09 my_lib.cpp
-rw-r--r-- 1 jocke lteli 139 Jan 20 18:09 my_lib.h
-rw-r--r-- 1 jocke lteli 2488 Jan 20 18:28 my_lib.o
-rwxr-xr-x 1 jocke lteli 8347 Jan 20 18:28 my_test*
-rw-r--r-- 1 jocke lteli 137 Jan 20 18:06 my_test.cpp
my_pc [6:28pm] [own_useful_programs/mom_visulaizer/my_test] => ./my_test
./my_test: error while loading shared libraries: libmy_lib.so.0: cannot open shared object file: No such file or directory
my_pc [6:28pm] [own_useful_programs/mom_visulaizer/my_test] => ldd my_test
linux-vdso.so.1 => (0x00007fffa43f1000)
libmy_lib.so.0 => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000375da00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003757600000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000375c200000)
libc.so.6 => /lib64/libc.so.6 (0x0000003757a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003757200000)

我还尝试在我的 .cshrc.user 文件中包含 LD_LIBRARY_PATH 的设置。库和 exe 都是 64 位的:

my_pc [6:36pm] [own_useful_programs/mom_visulaizer/my_test] => file my_test
my_test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
my_pc [6:36pm] [own_useful_programs/mom_visulaizer/my_test] => file libmy_lib.so.0.1
libmy_lib.so.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

最佳答案

您正在 make 中设置 LD_LIBRARY_PATH,而不是在 shell 中,因此该设置仅在 make 中有效

试试这个:

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)
$ ./my_test

关于c++ - 即使我修改了 LD_LIBRARY_PATH,也找不到我的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com