C++ 对CryptReleaseContext和其他带有Cgo的Advapi32调用的依赖关系

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.

我有一个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的东西

以下是对上述解释的更好看法。欢迎提出任何意见

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
问题消失。参考: