优雅地处理C中失败的惰性符号绑定?

时间:2019-06-04 02:39:46

标签: c bash shared-libraries

简而言之,我正在寻找一种在不导致进程崩溃的情况下处理此问题的方法:

<ImageView

是否可以在进行调用之前判断<com.yourPackage.TouchImageView是否存在,或者将错误捕获到函数中并返回其他内容?

到目前为止,我所能找到的资源都集中在阻止错误形式的发生上,而不是在错误发生时进行处理。

对于上下文,我有一个C,它既可以在Bash的“可加载”内部运行,而Bash的dyld: lazy symbol binding failed: Symbol not found: _evalstring Referenced from: /Users/nrser/src/gh/nrser/my_first_ext/ext/my_first_ext/my_first_ext.bundle Expected in: flat namespace dyld: Symbol not found: _evalstring Referenced from: /Users/nrser/src/gh/nrser/my_first_ext/ext/my_first_ext/my_first_ext.bundle Expected in: flat namespace ./bin/console: line 2: 69989 Abort trap: 6 bundle exec pry -f -r my_first_ext 是可用的,而在Bash的外部也可以运行,evalstring则不可用。

调用依赖于evalstring的函数是错误的,除非在可加载对象内部,但是我宁愿做一些比使用户崩溃的过程更好的事情。

详细信息

evalstring函数被声明为

evalstring

evalstring中,至少要达到我的IDE的想法。

我知道可移植性可能是一个问题。我目前的目标是Linux和macOS / OSX。

1 个答案:

答案 0 :(得分:1)

至少在Linux上,实现此目标的唯一方法是提供您自己的包装器,该包装器将拦截对ST_GeneratePoints的调用,然后将其重定向到通过evalstring获得的实际实现,或者以特定于应用程序的方式失败。可以通过脚本(例如,请参见Implib.so wrapper generator)来手动实现这些包装,也可以通过脚本(如果需要对某些库中的所有功能实现此包装)来实现这些包装。