【发布时间】:2013-03-22 18:11:26
【问题描述】:
我正在将一个 DLL 从 Windows 移植到 Linux(实际上是 OS X)。 我使用这个StackOverflow article 来进行更改。
即我已将 Windows“bool DllMain()”移植到 Linux 方式:
__attribute__((constructor)) void dllLoad();
__attribute__((destructor)) void dllUnload();
... 但两者都是 void 返回类型。如果构造函数中不满足条件,我需要能够执行与 Windows 相同的操作并返回 FALSE,以便 dlopen() 失败并且 .so 不会加载。
如何让调用 dlopen() 失败?
【问题讨论】:
-
尝试抛出异常。我不知道这是否可行,但如果 dlopen 是理智的(并且可能是理智的)它应该抓住它并指示失败。
-
如果不满足共享库中的某些运行时条件,您希望 dlopen 失败吗?
-
这和C有什么关系? C 没有正式的构造函数。
-
@tjameson 这不是 C++ 意义上的构造函数。它是动态库加载时调用的特殊函数。
-
@JamesMcLaughlin - 嗯,不知道。这实际上很酷。