当我运行一个在运行时链接到共享库的进程(在进程启动时链接,稍后不与 链接dlload())时,.so除了LD_LIBRARY_PATH?
背景:
我编写了一些使用特定第三方库的 C++ 代码。我已经在两个不同的平台上安装了这个库并编译了我的代码,都是 Ubuntu 但不同的版本,以及不同版本的 gcc。该库是从源代码编译和安装的,位于/usr/local/lib两个平台上。当我编译我的代码时,我链接了pkg-config --libs第三方库的参数,并且我已经验证pkg-config --libs在两个平台上返回完全相同的内容。
我的代码在两个平台上都成功编译,并且在两个平台上都LD_LIBRARY_PATH没有定义(或定义为空"":)。但是,当我在一个平台上运行它时它工作正常,而在另一个平台上我收到此错误:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有趣的是,那那些没有工作,是新的Ubuntu和gcc版本。:/
所以我试图弄清楚工作人员如何能够找到图书馆,以便我可以让坏的人以同样的方式找到图书馆。(即,没有设置LD_LIBRARY_PATH)
更新:
这是我的输出 cat /etc/ld.so.conf.d/*
...在工作(旧)系统上:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)
...在损坏的(较新的)系统上:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu …Run Code Online (Sandbox Code Playgroud) 上次更新后发生了这种情况:
/usr/lib/apt/methods/http: relocation error: /usr/lib/x86_64-linux-gnu/libgnutls.so.30: symbol _idn2_punycode_decode version IDN2_0.0.0 not defined in file libidn2.so.0 with link time reference
Reading package lists... Done
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (127)
E: Method /usr/lib/apt/methods/http did not start correctly
Run Code Online (Sandbox Code Playgroud)
这是什么?我该如何解决?
最新的命令和得到的结果:
$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:3 http://ppa.launchpad.net/certbot/certbot/ubuntu bionic InRelease
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Hit:5 http://ppa.launchpad.net/ondrej/apache2/ubuntu bionic InRelease
Get:6 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease [20.8 kB]
Get:7 …Run Code Online (Sandbox Code Playgroud) 使用 Unity3D for Linux 制作的游戏.dll在其数据文件夹中包含文件GameDataFolder/Managed。
这很奇怪,因为我认为 Linux 使用.so文件而不是.dll文件。
(Android-Unity3D 应用程序也是如此。)
为什么?
谁能帮我运行 cs 便携式游戏,我以前一直在 Windows 上玩这个游戏??它是免费的,下载链接在这里,下载链接在他的个人资料描述的底部。
文件扩展名为.x86,游戏只有45MB,所以下载时间不会太长。
这可能是一个非常愚蠢的错误,但在网络上找不到任何参考。
我尝试编译这个最低限度的 readline 示例:
#include <stdio.h>
#include <malloc.h>
#include <readline/readline.h>
void main(void){
char *line;
while( 1==1 ){
line=readline("enter text>");
printf("text: %s <\n",line);
free(line);
}
}
Run Code Online (Sandbox Code Playgroud)
得到了这个:
$>cc -lreadline read_test.c
/tmp/cc6JYBvf.o: In function `main':
read_test.c:(.text+0xe): undefined reference to `readline'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
相同的代码在我的笔记本 Ubuntu 10.04 上完美编译。
也尝试过:
cc -L/usr/lib/x86_64-linux-gnu -lreadline read_test.c
Run Code Online (Sandbox Code Playgroud)
或者
cc -L/usr/lib/x86_64-linux-gnu -lreadline -lncurses read_test.c
Run Code Online (Sandbox Code Playgroud)
和其他几个带有 -m64 或 --static 的变体
我已经安装了 libreadline6-dev 和 libreadline5-dev。
提前致谢。
拉洛
我正在尝试编译一个大项目,它包含一个库:
SAMG/ifort64.9.1.041-emt64/lib/libguide.so
当我尝试制作项目时,出现错误消息:
hidden symbol `pthread_atfork' in /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a(pthread_atfork.oS) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
Run Code Online (Sandbox Code Playgroud)
我试图添加 -pthreads 以及 -lpthreads 但它没有帮助。
./a.out:加载共享库时出错:libc++.so.1:无法打开共享对象文件:没有这样的文件或目录
虽然:
$ echo $LD_LIBRARY_PATH
/home/exe/libcxx/lib:/home/exe/llvm/lib:/usr/local/lib
$ ls /usr/local/lib
libc++.so libc++.so.1 libc++.so.1.0 python2.7 python3.2
Run Code Online (Sandbox Code Playgroud)
我什至将它复制到可执行文件旁边,仍然没有效果。
我究竟做错了什么?
我已经完成了以下命令来设置 LD_PRELOAD 的路径。但这是错误的路径。
export LD_PRELOAD=/home/
Run Code Online (Sandbox Code Playgroud)
有谁知道 Ubuntu 12.04 上 LD_PRELOAD 的默认路径是什么?重置导出的确切命令是什么?
尝试在 Ubuntu 13.10 上编译和使用OpenFST会导致链接错误,例如“对 dlopen 的未定义引用”。如何解决这个问题?在线搜索建议包括-ldl在 gcc 命令行中,但这还不够。