假设我有一个静态库libx.a。如何使该库中的某些符号(不是全部)始终出现在我与我的库链接的任何二进制文件中?原因是我需要这些符号通过dlopen+dlsym可用。我知道--whole-archive链接器开关,但它强制所有目标文件从库存档链接到生成的二进制文件,这不是我想要的...到目前为止的观察(CentOS5.4,32位)(upd:这一段是错误的;我无法重现此行为)ldmain.olibx.a将愉快地去除所有未引用的符号,而ldmain.o-L.-lx将链接整个库。我想这取决于所使用的binutils版本,但是,较新的链接器将能够从静态库中挑选单个对象。另外一个问题是在Windo
假设我有一个静态库libx.a。如何使该库中的某些符号(不是全部)始终出现在我与我的库链接的任何二进制文件中?原因是我需要这些符号通过dlopen+dlsym可用。我知道--whole-archive链接器开关,但它强制所有目标文件从库存档链接到生成的二进制文件,这不是我想要的...到目前为止的观察(CentOS5.4,32位)(upd:这一段是错误的;我无法重现此行为)ldmain.olibx.a将愉快地去除所有未引用的符号,而ldmain.o-L.-lx将链接整个库。我想这取决于所使用的binutils版本,但是,较新的链接器将能够从静态库中挑选单个对象。另外一个问题是在Windo
我使用一个库,它为脚本语言定义了内部除法运算符。不幸的是,它不会对除数进行零检查。这导致很多头痛。我知道接线员的签名。doubleScriptClass::Divide(double&,double&);遗憾的是,它甚至不是C函数。有什么方法可以让我的应用程序使用我自己的Divide函数而不是ScriptClass::Divide函数?编辑:我知道dlopen(NULL,..)并将“C”函数替换为用户定义的函数。这可以为类成员函数完成吗(不求助于使用损坏的名称)? 最佳答案 正如其他人所提到的,各种链接器和动态链接器实现将提供一些看
我使用一个库,它为脚本语言定义了内部除法运算符。不幸的是,它不会对除数进行零检查。这导致很多头痛。我知道接线员的签名。doubleScriptClass::Divide(double&,double&);遗憾的是,它甚至不是C函数。有什么方法可以让我的应用程序使用我自己的Divide函数而不是ScriptClass::Divide函数?编辑:我知道dlopen(NULL,..)并将“C”函数替换为用户定义的函数。这可以为类成员函数完成吗(不求助于使用损坏的名称)? 最佳答案 正如其他人所提到的,各种链接器和动态链接器实现将提供一些看
如何找到程序的argc和argv来自共享对象?我正在用C编写一个库,它将通过LD_PRELOAD加载.我已经能够通过两种不同的方式找到堆栈:阅读rsp通过内联__asm__打电话。阅读/proc//maps并解析堆栈的条目。然后我可以创建一个指针,将其指向堆栈段,然后循环查找数据。问题是我想不出一种有效的方法来确定哪些字节是argc和指向argv的指针的指针字符串。我知道/proc//cmdline还包含参数,每个参数由0x00分隔,但我有兴趣在内存中找到所有内容。在gdb中我看到一个DWORD对于argc其次是QWORD这是第一个指针。argc地址前20字节是一个指向主程序代码段的指
如何找到程序的argc和argv来自共享对象?我正在用C编写一个库,它将通过LD_PRELOAD加载.我已经能够通过两种不同的方式找到堆栈:阅读rsp通过内联__asm__打电话。阅读/proc//maps并解析堆栈的条目。然后我可以创建一个指针,将其指向堆栈段,然后循环查找数据。问题是我想不出一种有效的方法来确定哪些字节是argc和指向argv的指针的指针字符串。我知道/proc//cmdline还包含参数,每个参数由0x00分隔,但我有兴趣在内存中找到所有内容。在gdb中我看到一个DWORD对于argc其次是QWORD这是第一个指针。argc地址前20字节是一个指向主程序代码段的指
我们在动态库中遇到浮点精度问题。设置如下:我们有一个动态库,它对大量float执行计算X。X由很多浮点运算组成。我们将这个动态库链接到两个可执行文件:A和B。在库中,我们打印计算X的输入。对于运行的可执行文件A和B,报告完全相同的输入(最多DBL_DIG小数位)。然而,对于可执行文件A和可执行文件B,计算X的输出是不同的。可执行文件和库都是用C++编写的,并在同一台机器上使用相同的GCC编译器版本编译。该库仅使用与可执行文件A相同的编译器设置编译一次,但可执行文件B的编译器设置可能不同。由于使用相同的库,我们期望在提供相同输入时两个可执行文件具有相同的计算精度。看起来库的浮点精度受外部
我们在动态库中遇到浮点精度问题。设置如下:我们有一个动态库,它对大量float执行计算X。X由很多浮点运算组成。我们将这个动态库链接到两个可执行文件:A和B。在库中,我们打印计算X的输入。对于运行的可执行文件A和B,报告完全相同的输入(最多DBL_DIG小数位)。然而,对于可执行文件A和可执行文件B,计算X的输出是不同的。可执行文件和库都是用C++编写的,并在同一台机器上使用相同的GCC编译器版本编译。该库仅使用与可执行文件A相同的编译器设置编译一次,但可执行文件B的编译器设置可能不同。由于使用相同的库,我们期望在提供相同输入时两个可执行文件具有相同的计算精度。看起来库的浮点精度受外部
在一个项目中,我的同事创建了一个静态库,例如liba.a,它与应用程序链接。在liba.a中,他将libcmalloc()覆盖为他的所有者版本。我创建了一个共享库libs.so,它也与应用链接。问题是当我的libs.so与应用程序链接时,我的libs.so中使用的malloc()将是liba.a中的那个,不是标准libc.so中的那个,这会导致问题。然后,我想将libc.a静态链接到我的libs.so,我为gcc使用了-static-shared-fPIcflags。但我总是得到arm-2012.03/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.
在一个项目中,我的同事创建了一个静态库,例如liba.a,它与应用程序链接。在liba.a中,他将libcmalloc()覆盖为他的所有者版本。我创建了一个共享库libs.so,它也与应用链接。问题是当我的libs.so与应用程序链接时,我的libs.so中使用的malloc()将是liba.a中的那个,不是标准libc.so中的那个,这会导致问题。然后,我想将libc.a静态链接到我的libs.so,我为gcc使用了-static-shared-fPIcflags。但我总是得到arm-2012.03/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.