我已经成功地在Linux x86_x64上构建了几个32位的静态和共享库,现在我试图将它们链接到一个可执行文件,并得到以下错误:
/usr/bin/ld: foo.so: __moddi3: invalid version 21 (max 0)
foo.so: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
其中foo.so是我构建的共享库之一。
__moddi3函数是的一部分。它的签署是:
— Runtime Function: long __moddi3 (long a, long b)
在Linux/macOS上使用CMake的时,默认情况下它会为共享库生成类似的内容:
# ifndef SOMELIB_EXPORT
# ifdef somelib_EXPORTS
/* We are building this library */
# define SOMELIB_EXPORT __attribute__((visibility("default")))
# else
/* We are using this library */
# define SOMELIB_EXPORT __attri
我正在试图找到导入外部符号的共享库。目前,我可以通过使用nm或许多替代方案(如使用radare2 )获得所有导入的符号。我还可以通过使用ldd获得二进制所依赖的库。但是,由于找不到有效的方法来获取二进制文件中的哪个外部符号依赖于哪个共享库,我就陷入了困境。因此,例如,如何找到一个共享库,它可以高效地导出名为foo或printf的函数或任何东西?我举一个例子:
Output of nm -D myfile
w __cxa_finalize
U foo
w __gmon_start__
我有一些代码崩溃并产生了一个核心转储。当在GDB中打印时,它的顶部看起来是这样(更改了名称)。
#0 0x00007f66be37d428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007f66be37f02a in __GI_abort () at abort.c:89
#2 0x00007f66be9b784d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/l
我在AIX5.3上,使用C。
我有一个应用程序(foo),它在运行时在共享库(lib1.so)中链接,然后通过dlopen()动态加载另一个库(lib2.so)。所以在use 1中使用了一些函数,所以foo不使用。当我执行应用程序时,会得到一个类似于以下内容的错误:
rtld: 0712-001 Symbol someLibFunc was referenced from module
/libdir/lib2.so(), but a runtime definition of the symbol was not found.
我不认为更改dlopen()标志会产生任何影响,因为我的问题似乎
最近,我在OSX程序中添加了一些动态插件行为,该程序按照设计的方式工作。但是,在Linux (泛型)上尝试相同的方法失败,因为dlsym()库调用无法以在OSX中正常工作的方式解析符号。
从阅读man dlsym可以明显看出,系统调用在这两种体系结构中的实现非常不同,但我认为最基本的情况也是一样的,但显然并非如此。
下面的示例(虚拟)在OSX中运行良好,但在Linux中不起作用。
在Linux中,有什么解决办法可以让它以同样的方式解析符号吗?
// Needed to make RTLD_DEFAULT available on GNU/Linux
#define _GNU_SOURCE
#
我是新的内核驱动程序开发。所以我被困在这里面了。如何从另一个内核模块调用内核模块的功能?这些都是我的.c文件。
模1.c:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
int multiplication(int a, int b)
{
int ans=0;
ans = a * b;
printk(KERN_INFO"Returns the Multiplication to Module2!: %d\n", ans