Articles of 共享库

将静态库转换为dynamic链接库的方法

如果我所有的库都是* .a静态库。 有没有办法,我可以将其转换为* .sodynamic链接库? 也许使用ld? 我正在使用SUSE Linux。 ELF平台。

GDB不打破dynamic加载.so文件?

在我的Linux系统中,我正在编写一个运行时dynamic加载一些.so库的程序。 就像这样:当开始运行时,可执行程序将在特定目录下search,然后加载该目录中的所有.so文件。 请注意 ,可执行文件和.so是独立构build的,可执行文件的构build不链接到.so文件。 我的问题是:在运行程序(因此所有.so库已经加载)与GDB连接后, 我似乎能够在.so文件中的代码设置一个断点 (GDB提示我,这个断点是设置在一个共享库中), 但是这个断点从来没有真正的中断。 我应该如何让这些断点真正起作用? 在debugging会话期间,我在正确的位置提供了所有源代码,并且-g选项处于打开状态。 编译时我也删除了-O2优化。

在linux中dynamic库共享全局variables

我们知道,linux调用ldconfig加载所有*.so库,然后链接使用共享库的应用程序。 但是,我很困惑这个全局variables是如何工作的。 由于在所有这些应用程序中只有一个共享库的副本,它们共享共享库中的全局variables吗? 如果是,那么他们如何同步? 谢谢,

使用共享库的问题

我正在关注这个页面的解释, 这个页面试图在Ubuntu Linux上构build和使用共享库。 我在PC上使用交叉编译器构build库和应用程序,而不是将文件复制到目标系统并在那里运行。 最后,我处于正确定义所有符号链接的阶段,而且我能够运行应用程序 – 但不是以所需的forms。 假设我在目录/home/ysap/libs有共享库libtest.so.1.0 。 然后我在同一个目录中创build了符号链接libtest.so.1和libtest.so ,它们都指向库文件。 在目录/home/ysap/apps我有一个使用test库的应用程序app.e 现在,运行应用程序,我可以input: > LD_LIBRARY_PATH=/home/ysap/libs ./app.e 和应用程序运行良好。 不过,我想消除这个任务,所以我试着打字: > export LD_LIBRARY_PATH=/home/ysap/libs > ./app.e 但不幸的是我收到一条错误消息,说: ./app.e: error while loading shared libraries: libtest.so.1: cannot open shared object file: No such file or directory 我也试过打字: > ldconfig -n /home/ysap/libs 和 > sudo ldconfig -n /home/ysap/libs 但它没有帮助。 我究竟做错了什么? 我怎样才能使app.e运行W […]

有关.so文件的信息

我是C编程新手。我对.so文件没有任何想法。 它有什么需要? 我如何创build它? 如何绑定我的C代码或二进制文件? 如果我没有制作任何.so文件并直接制作C代码的可执行二进制文件,那么它的PROS和CONS是什么? 需要一个详细的描述。

如何从`callq func @ PLT`获取`func`的实际地址

在我的Linux程序中,我需要一个接收地址addr的函数,并检查放在addr的callq指令是否正在调用从共享库加载的特定函数func 。 我的意思是,我需要检查在addr是否有像callq func@PLT这样的东西。 那么,在Linux上,如何从callq func@PLT指令到达函数func的真实地址?

在linux上分发.so文件?

我有一个共享库,我的应用程序需要(一个.so),我想知道什么是最好的分配方式? 这不是可以安装的东西,我需要在LDpath中运行应用程序。

libSDL2-2.0.so.0:无法打开共享对象文件

我正在尝试从源代码构buildSDL库。 我已经下载了压缩文件(即SDL2-2.0.3.tar.gz )并将其解压缩。 我不想在/usr/local安装这些文件。 根据这个链接 ,我需要改变configure 最后一个命令是“sudo”,所以我们可以把它写到/ usr / local(默认)。 您可以使用–prefix选项将其更改为不同的位置。 实际上,有很多好的选项可以用于configuration! 一定要看看它的 – 帮助选项的细节。 这就是我所做的。 mkdir build cd build ../configure make sudo make install 在我创build的install文件夹中是以下文件 share lib include bin 现在我想运行testing文件。 我select了这个testatomic.c ,这是命令行gcc testatomic.c -o test -I/home/xxxx/Desktop/SDL2-2.0.3/install/include/SDL2 -L/home/xxxx/Desktop/SDL2-2.0.3/install/lib -lSDL2 -lSDL2main 我得到这个错误 error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file: No such file […]

信息将被build立入Linux共享的图书馆

我在Linux中有两个共享库,它们在构build时在所有方面都是相同的,只是每个公开的函数具有不同的接口(一个接受一些第三方数组types,另一个接受string)。 我可以构build两个共享库版本,而且我想知道是否有一种方法可以将元信息插入到共享库本身中(很像您如何在构build时将注释/公司名称/ etc插入到DLL ,然后可以在运行时查询)。 我不想以两种不同的方式命名.so文件,因为它们实际上是相同的东西,它们是更大系统的可互换部分。 我需要我的代码在库上做一个dlopen和dlsym来知道它是什么味道,以便它有正确的接口。 我目前正在完成的方法是在其中一个中添加一个名为“Flavor_A”的no-op函数,在另一个中添加一个“Flavor_B”。 然后,我使用Flavor_A或Flavor_B来validation我正在处理哪个共享库。 如果我得到一个NULL,我知道Flavor_X不存在,在这种情况下,它必须是另一种味道。 我觉得应该有更好的方法。 所以,这就是我来这里的原因。 任何人都有如何build立一些运行时查询信息到.so二进制本身的build议? 谢谢。

C ++:如何build立我自己的实用程序库?

我开始熟练掌握C ++,这样我就可以编写自己的基于C ++的脚本(replace之前编写的bash和PHP脚本)。 我发现我开始有一小部分实用程序函数和子例程,我想在几个不相关的C ++脚本中使用它们。 我知道我不应该重新发明轮子,我可以使用外部库来为我自己创build的一些实用程序。 然而,创造我自己的效用函数是很有趣的,它们完全适合我所想要的工作,这对我来说是很大一部分学习过程。 当我精通足够的工作来处理更严重的长期项目时,我会看到使用更多精美的外部库。 所以,问题是:我如何pipe理我的个人实用程序库,使其function可以很容易地包含在我的各种脚本中? 我使用的是Linux / Kubuntu,vim,g ++等,主要是编写CLI脚本。 不要假设经验太多! ;)链接教程或相关主题正确logging的地方是受欢迎的。