我有一些使用共享库的代码(GCC上的c代码).编译时,我必须使用-I和-L显式定义include和library目录,因为它们不在标准位置.当我try 运行代码时,我得到以下错误:

./sync_test 
./sync_test: error while loading shared libraries: libsync.so: cannot open shared object file: No such file or directory

但是,请执行以下操作,一切工作正常:

export LD_LIBRARY_PATH="/path/to/library/"
./sync_test

现在,奇怪的是,这只有效一次.如果我再次try 运行sync_test,除非我先运行export命令,否则我会得到相同的错误.我try 将以下内容添加到我的.bashrc中,但没有什么不同:

LD_LIBRARY_PATH="/path/to/library/"

推荐答案

使用

export LD_LIBRARY_PATH="/path/to/library/"

在你的房间里.否则,它将只对bash可用,而不是您启动的任何程序.

在链接时try 使用-R/path/to/library/标志,它将使程序查看该目录,并且您不需要设置任何环境变量.

编辑:看起来-R只是Solaris,而你在Linux上.

另一种方法是将路径添加到/etc/ld.so.conf并运行ldconfig.请注意,这是一个全局更改,将应用于所有动态链接的二进制文件.

C++相关问答推荐

C语言中字符数组声明中的标准

如何在C宏中确定 struct 中元素的类型?

为什么即使在强制转换时,此代码也会溢出?

X86/x64上的SIGSEGV,由于原始内存访问和C中的DS寄存器之间的冲突,在Linux上用TCC编译为JIT引擎

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

错误:包含文件时类型名称未知

在循环中复制与删除相同条件代码的性能

是否需要包括<;errno.h>;才能使用perror?

如何将另一个数组添加到集合中,特别是字符串?

为 struct 中的数组动态分配内存时出错

OSDev--双缓冲重启系统

int * 指向int的哪个字节?

不带Malloc的链表

浮动目标文件,数据段

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值

如何在Rust中处理C的longjmp情况?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

添加/删除链表中的第一个元素

从管道读取数据时丢失

如何修复数组数据与列标题未对齐的问题?