C++ 对CryptReleaseContext和其他带有Cgo的Advapi32调用的依赖关系
我有一个go二进制(让我们调用a)通过cgo使用两个dll(B和C)。这两个DLL都是用C++编写的,不依赖于任何Windows库,所以没有对任何WINAPI DLL进行显式链接。 cgo使用migw 4.9.2进行编译 问题是;当我编译并运行时,它没有开始说“…CryptReleaseContext无法在动态链接库中找到…” 我从依赖步行者那里看到 只有“B”->依赖于Advapi32.dll 只有“C”->依赖于Advapi32.dll “A”(go可执行文件)->也取决于Advapi32.dll。当然还有B和C 在“A”的上下文中,当我单击dependencies时 C->列出了我真正使用的函数。Advapi32.dll也在依赖项中列出,其中列出了3个在其中使用的函数但CryptAcquireContextW、CryptGenRandom、CryptReleaseContext似乎是库C级别上未解析的函数 B->这三个功能根本没有列出,但真正的内容列出正确 所以我的问题是,;为什么这3个winapi函数看起来像是在库“C”中定义的。当我检查Advapi32.dll时,我看到这三个函数都在其中定义并且已经使用过了 另一个问题是,由于它们是没有损坏或修饰的c函数,为什么在从Advapi32.dll解析的运行时无法在A.exe的上下文中找到它们 由于B和C都有非常相同的编译/链接器标志,我怀疑这里有一些关于cgo的东西 以下是对上述解释的更好看法。欢迎提出任何意见C++ 对CryptReleaseContext和其他带有Cgo的Advapi32调用的依赖关系,c++,visual-c++,dll,mingw,cgo,C++,Visual C++,Dll,Mingw,Cgo,我有一个go二进制(让我们调用a)通过cgo使用两个dll(B和C)。这两个DLL都是用C++编写的,不依赖于任何Windows库,所以没有对任何WINAPI DLL进行显式链接。 cgo使用migw 4.9.2进行编译 问题是;当我编译并运行时,它没有开始说“…CryptReleaseContext无法在动态链接库中找到…” 我从依赖步行者那里看到 只有“B”->依赖于Advapi32.dll 只有“C”->依赖于Advapi32.dll “A”(go可执行文件)->也取决于Advapi32.
Dump of file A.exe
File Type: EXECUTABLE IMAGE
Section contains the following imports:
ADVAPI32.dll
9B0818 Import Address Table
9B00F4 Import Name Table
0 time date stamp
0 Index of first forwarder reference
B.dll
9B0B20 Import Address Table
9B0400 Import Name Table
0 time date stamp
0 Index of first forwarder reference
54C correct_function_from_B
C.dll
9B0EB8 Import Address Table
9B0798 Import Name Table
0 time date stamp
0 Index of first forwarder reference
31 correct_function_from_C
DB CryptReleaseContext
D1 CryptGenRandom
C1 CryptAcquireContextW
`对
exe
和dll
文件使用相同的编译器时,一些dll
问题消失。参考: