标签: dynamic-linking

Ubuntu 在哪里寻找共享库?

当我运行一个在运行时链接到共享库的进程(在进程启动时链接,稍后不与 链接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)

shared-library libraries dynamic-linking

33
推荐指数
2
解决办法
7万
查看次数

涉及 libgnutls.so.30 的重定位错误,上次更新后的错误代码 (127)

上次更新后发生了这种情况:

/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)

updates apt dynamic-linking 18.04 18.10

26
推荐指数
2
解决办法
7265
查看次数

.dll 在 Linux 程序中做什么?

使用 Unity3D for Linux 制作的游戏.dll在其数据文件夹中包含文件GameDataFolder/Managed

这很奇怪,因为我认为 Linux 使用.so文件而不是.dll文件。

(Android-Unity3D 应用程序也是如此。)

为什么?

mono dynamic-linking unity3d

20
推荐指数
2
解决办法
1万
查看次数

为什么我的主目录中有一个 .steampath?

在终端中,我看到一个名为 的断开链接.steampath,我没有删除/home/user/.steam/sdk32/steam,但它不见了。 在此处输入图片说明

为什么在.steampath那里?

我应该删除它吗?

steam symbolic-link dynamic-linking hard-link

14
推荐指数
1
解决办法
3817
查看次数

在 Ubuntu 14.04 上安装 Oracle 数据库 12c

有没有人让 Oracle 12c 在 Ubuntu 14.04 上工作?我尝试遵循本教程该教程是为在 Ubuntu 12.04 上安装 Oracle 12c 而编写的):

但是在链接 faze 时,我遇到了一些本教程中没有提到的错误。

如果有人在那里让它发挥作用,如果他们能分享他们的见解,我将不胜感激。

database oracle dynamic-linking software-installation 14.04

13
推荐指数
1
解决办法
7万
查看次数

如何运行扩展名为 .x86 的游戏

谁能帮我运行 cs 便携式游戏,我以前一直在 Windows 上玩这个游戏??它是免费的,下载链接在这里,下载链接在他的个人资料描述的底部。

文件扩展名为.x86,游戏只有45MB,所以下载时间不会太长。

games dynamic-linking

9
推荐指数
2
解决办法
4万
查看次数

无法在 Ubuntu 14.04 上链接 libreadline

这可能是一个非常愚蠢的错误,但在网络上找不到任何参考。

我尝试编译这个最低限度的 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。

提前致谢。

拉洛

libraries dynamic-linking 14.04

5
推荐指数
1
解决办法
5245
查看次数

DSO 引用了 /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a(pthread_atfork.oS) 中的隐藏符号 `pthread_atfork'

我正在尝试编译一个大项目,它包含一个库:

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 但它没有帮助。

dynamic-linking static-linking

5
推荐指数
0
解决办法
742
查看次数

为什么 LD_LIBRARY_PATH 没有任何影响?

./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)

我什至将它复制到可执行文件旁边,仍然没有效果。

我究竟做错了什么?

filesystem compiling dynamic-linking clang

4
推荐指数
1
解决办法
5481
查看次数

如何重置 LD_PRELOAD

我已经完成了以下命令来设置 LD_PRELOAD 的路径。但这是错误的路径。

export LD_PRELOAD=/home/
Run Code Online (Sandbox Code Playgroud)

有谁知道 Ubuntu 12.04 上 LD_PRELOAD 的默认路径是什么?重置导出的确切命令是什么?

environment-variables 12.04 ld dynamic-linking

3
推荐指数
1
解决办法
1万
查看次数

在 Ubuntu 上编译和使用 OpenFST 时如何处理“对 dlopen 的未定义引用”错误?

尝试在 Ubuntu 13.10 上编译和使用OpenFST会导致链接错误,例如“对 dlopen 的未定义引用”。如何解决这个问题?在线搜索建议包括-ldl在 gcc 命令行中,但这还不够。

dynamic-linking

3
推荐指数
1
解决办法
3万
查看次数