【发布时间】:2009-03-23 23:12:25
【问题描述】:
所以,我有一个有趣的问题。我正在使用一组专有的 dll,我显然没有源代码。目标是编写一个中间 dll,将来自专有 dll 的大量函数调用组合在一起。使用 g++ 编译时,我遇到的问题是原始 dll 出现以下错误: 无法导出 libname_NULL_THUNK_DATA。未找到符号。
如果我添加一个 main 并编译为可执行文件,一切都会按预期工作。我正在使用 mingw 进行编译。感谢您的帮助。
对于第一个回复:要么我对你在说什么感到困惑,要么我没有很好地表达我的问题。我没有明确地试图从我的包装器中导出任何东西,我只是从他们的 dll 中调用函数。问题是我收到错误,它无法将这些特定符号从 dll 导出到我的包装器。问题是我什至不完全确定这些 _NULL_THUNK_DATA 符号的用途。我进行了搜索并在某个地方阅读了它们不应该导出的内容,因为它们是 Windows 使用的内部符号。我曾尝试对链接器使用 --exclude-symbols 指令,但它似乎没有做任何事情。如果我完全误解了你想说的话,我深表歉意。
所以,我认为我的问题与此有关。当仅编译使用 dll 的标准可执行文件时,我能够包含标头并直接调用函数,例如:
#include :3rdparty.h
int main(){
dostuff(); // a function in the 3rdparty.dll
}
这将编译并运行良好。我只需要在 g++ 命令中链接库。 当与 -shared 标志链接时,我会收到这些错误(当然删除了 main )。我认为这与默认情况下 g++ 尝试从 dll 导入所有符号的事实有关。我不明白为什么会在 dll 和可执行文件中发生这种情况。我将尝试使用 GetProcAddress()。谢谢!
【问题讨论】: