- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两个在Linux上使用的共享库libA和libB,它们以两种方式使用:
1.作为共享库直接链接到“脱机”测试可执行文件。
2.在实际应用程序中使用:辅助包装器库(libWrapper)与libA和libB链接,该应用程序使用系统调用dlopen("libWrapper.so", RTLD_NOW | RTLD_LOCAL)
仅打开包装器lib。
问题:库运行复杂的图像分析算法,有时数值结果不相等。
我应该找到一种方法来确保测试可执行文件给出的结果与真实应用程序相同,但是我不允许更改库或真实应用程序,而只能更改测试可执行文件。
我使用LD_DEBUG = bindings来查找输出的差异(到stderr):
$ grep acosf log-bindings.test-executable # *"offline" test executable*
binding file libB.so to libA.so: normal symbol `acosf.J'
binding file libB.so to libA.so: normal symbol `acosf.A'
binding file libA.so to libA.so: normal symbol `acosf.J'
binding file libA.so to libA.so: normal symbol `acosf.A'
binding file libB.so to libA.so: normal symbol `acosf' <<<<<<<
binding file libA.so to libA.so: normal symbol `acosf' <<<<<<<
$ grep acosf log-bindings.process # logging from *real process*
binding file libB.so to libA.so: normal symbol `acosf.J'
binding file libB.so to libA.so: normal symbol `acosf.A'
binding file libB.so to libB.so: normal symbol `_ZSt4acosf' # std::acosf
binding file libB.so to **libm**.so.6: normal symbol `acosf' <<<<<<
binding file libA.so to libA.so: normal symbol `acosf.J'
binding file libA.so to libA.so: normal symbol `acosf.A'
binding file libA.so to **libm**.so.6: normal symbol `acosf' <<<<<<
release/libBdl/lib/libA.so: definition of acosf
release/libBdl/lib/libB.so: reference to acosf
$ nm libA/libA.so | grep acosf
00665200 T acosf # impl. of acosf (text symbol)
0066c360 T acosf.A
0066c55c T acosf.J
00271fae t _Z13acosf_checkedf # acosf_checked(float)
00708244 r _Z13acosf_checkedf$$LSDA
$ nm libB/libB.so | grep acosf
01423780 T acosf # impl. of acosf (text symbol)
01424410 T acosf.A
0142460c T acosf.J
004c1b3a W _ZSt4acosf
01547eec r _ZSt4acosf$$LSDA
[newer CentOS7 system]$ nm /usr/lib/libm.so|grep acosf
0001b9c0 W acosf # weak symbol 'acosf'
0001b9c0 t __acosf # strong symbol / implementation
000176b0 T __acosf_finite
000176b0 t __ieee754_acosf # called by __acosf in libm
[newer CentOS7 system]$ nm /usr/lib/libm.so|grep expf
0001bc60 W expf # weak symbol 'expf'
0001bc60 t __expf # strong symbol / implementation
00017990 i __expf_finite
0002d370 t __expf_finite_ia32
0002d1b0 t __expf_finite_sse2
00017960 i __ieee754_expf # called by __expf in libm
0002d330 t __ieee754_expf_ia32
0002d1b0 t __ieee754_expf_sse2
test-executable:
--
real-application:
--
libWrapper.so:
--
libB.so:
3934: 004c12a6 40 FUNC WEAK DEFAULT 10 _ZSt4acosf
5855: 01423b80 506 FUNC GLOBAL DEFAULT 10 acosf.A
10422: 01423d7c 666 FUNC GLOBAL DEFAULT 10 acosf.J
14338: 01422ef0 40 FUNC GLOBAL DEFAULT 10 acosf
libA.so:
2333: 0066c1e8 506 FUNC GLOBAL DEFAULT 10 acosf.A
4179: 0066c3e4 666 FUNC GLOBAL DEFAULT 10 acosf.J
5772: 00665088 40 FUNC GLOBAL DEFAULT 10 acosf
test-executable:
symbol=expf; lookup in file=./test-executable.shared
symbol=expf; lookup in file=/lib/libdl.so.2
symbol=expf; lookup in file=/home/test/test/bin_NDEBUG/libA/libA.so
binding file libB.so to libA.so: normal symbol `expf' <<<<
symbol=acosf; lookup in file=./test-executable.shared
symbol=acosf; lookup in file=/lib/libdl.so.2
symbol=acosf; lookup in file=/home/test/test/bin_NDEBUG/libA/libA.so
binding file libA.so to libA.so: normal symbol `acosf' <<<<
real-application:
symbol=expf; lookup in file=real-application
symbol=expf; lookup in file=/home/test/lib/libX1.so
symbol=expf; lookup in file=/home/test/lib/libX2.so
symbol=expf; lookup in file=/home/test/lib/libX3.so
symbol=expf; lookup in file=/home/test/lib/libX4.so
symbol=expf; lookup in file=/lib/libdl.so.2
symbol=expf; lookup in file=/usr/lib/libstdc++.so.5
symbol=expf; lookup in file=/home/test/lib/libX5.so
symbol=expf; lookup in file=/lib/i686/libm.so.6
binding file libA.so to libm.so.6: normal symbol `expf' <<<<<<<
symbol=acosf; lookup in file=real-application
symbol=acosf; lookup in file=/home/test/lib/libX1.so
symbol=acosf; lookup in file=/home/test/lib/libX2.so
symbol=acosf; lookup in file=/home/test/lib/libX3.so
symbol=acosf; lookup in file=/home/test/lib/libX4.so
symbol=acosf; lookup in file=/lib/libdl.so.2
symbol=acosf; lookup in file=/usr/lib/libstdc++.so.5
symbol=acosf; lookup in file=/home/test/lib/libX5.so
symbol=acosf; lookup in file=/lib/i686/libm.so.6
binding file libA.so to libm.so.6: normal symbol `acosf' <<<<<<
linker option -Wl,--no-whole-archive
define LD_BIND_NOW
define LD_PRELOAD=libm.so
symbol=acosf; lookup in file=./test-executable.shared
symbol=acosf; lookup in file=/lib/i686/libm.so.6
symbol=acosf; lookup in file=/lib/libdl.so.2
symbol=acosf; lookup in file=libA.so
binding file libA.so to libA.so: normal symbol `acosf'
最佳答案
I am not permitted to change the libraries or the real application.
I used LD_DEBUG=bindings to find differences, and found that ...
LD_DEBUG
是调试此工具的错误工具。请改用GDB。
cos
,运行两个二进制文件,并确认它们实际上正在执行不同的代码。一旦您知道其中一种情况下的
cos
位于
libA
中(我无法完全解析您的描述,但是我认为这就是您声称已经观察到的内容),请弄清楚它如何进入
libA
中(使用链接器标记
-Wl,-y,cos
来确定)。
readelf -Ws prot-exe test-exe libA.so libB.so | grep ' cos$'
可能也很有启发。
关于c++ - 带有带有dlopen的共享库的不同数学符号绑定(bind),并直接链接到可执行文件(Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632394/
给定一个字符串,例如 s="##$$$#",我如何找到索引之前的“#”符号数等于“”数的索引$"符号在索引之后? 示例:如果 s="##$$$#",则输出将为 2。 解释:在索引 2 之前我们有 2
在本教程中,您将借助示例了解 JavaScript 符号。 JavaScript 符号 JavaScript ES6 引入了一种新的原始数据类型,称为 Symbol(符号)。符号是不可变的(不能更改)
在“函数编程的工艺”一书中,符号 '>.>' 将函数连接在一起,与 '.' 的方向相反。但是当我使用 ghci 实现它时,它显示了超出范围的错误 '>.>'。为什么?它是不再使用的旧符号吗? 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要从向量中删除 \"。这是我的数据: data <- c("\"https://click.linksynergy.com/link?id=RUxZriH*PWc&offerid=323058.1
我在 Nginx 配置中使用正则表达式来捕获文件 URL,但如果文件 URL 包含 # 符号,正则表达式模式将不会捕获它。 这里是nginx的配置部分。 location ~ ^/p/(?[\w\-=
如何使 & 符号在此图表的第一组条形/列下正确显示: http://jsfiddle.net/VxbrK/2/ 应该是“Apples & Oranges”而不是“Apples & Oranges”。
**在verilog中是什么意思? 我为测试台提供了以下逻辑 localparam NUM_INPUT_BITS = 1; localparam NUM_OUTPUT_BITS
我有一个使用正则表达式来验证电子邮件地址的方法。 public String searchFormail(String searchWord) { Pattern pattern = Patt
我想将一个字符串拆分为数字部分和文本/符号部分我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素 import re mystring = 'AD%5(6ag 0.33-
我有一些代码需要从数组中选择一个随机字符串,但它一直返回单个字母或数字。如何解决这个问题? var name = ["Yayek", "Vozarut", "Gezex",
我刚开始使用 Python,我在考虑应该使用哪种表示法。我读过 PEP 8关于 Python 符号的指南,我同意那里的大多数内容,除了函数名称(我更喜欢混合大小写风格)。 在 C++ 中,我使用匈牙利
在用 C# 编写代码时,我错误地在 if 语句中的变量前添加了一个符号(而不是感叹号)。 bool b = false; if (@b) { } 我很惊讶它编译成功,没有任何错误。 我想知道:上面的代
本文实例为大家分享了特殊字符替换电话号码中某一部分的方法,ios利用-号替换电话号码中间四位,供大家参考,具体内容如下 1、效果图 2、代码 rootviewcontroll
当我使用“x”和“z”作为符号时,这段代码没有问题: from sympy import * x, z = symbols('x z') y = -6*x**2 + 2*x*z**0.5 + 50*x
我需要从文本中删除标点符号: data <- "Type the command AT&W enter. in order to save the new protocol on modem;"
我有几个数字是 numeric 类。下面的例子。 df = c(12974,12412,124124,124124,34543,4576547,32235) 现在我想在每个数字前添加 '$' 符号而不
我有一个 highcharts 图例,其中符号以不同的大小显示,因为它们在实际图表中的大小不同。不幸的是,当数据点的大小增加时,它们也会在图例中增加。无论数据点大小如何,我都希望图例符号保持相同的大小
我需要使用包含平均值+-SD的标题。到目前为止,我只能得到以下信息: "Mean +- SD or N (%)" [1] "Mean +- SD or N (%)" 如何直接使用“+-”符号?您知道一
使用 XSLT 和 XPath 1.0,我有一个要转义的字符串以用于 URL,例如: one word & another 因此,描述元素的 text() 应该进行 URL 转义。 我该怎么做
我是一名优秀的程序员,十分优秀!