Я пытался на прошлой неделе скомпилировать мой linux-код в windows env, после того, как весь мой код был скомпилирован, он не смог запустить мои исполняемые файлы, так как он не смог загрузить мою dll сам.
Мой проект состоит из 1 исполняемого файла с именем (pcie_logger) и 1 DLL (libpci_test.dll), которые связаны с несколькими статическими библиотеками в Windows, DLL загружается динамически только при запуске.
PcieLogger.cpp:
int
main(int argc, char* argv[])
{
LIB_TRACK2(__PRETTY_FUNCTION__);
PcieLogger tool;
printf("Hello World\n");
return PciTest::main(tool, argc, argv);
}
PcieLogger.h:
#include "PciTest.h"
class PcieLogger: public PciTool {
public:
PcieLogger(): PciTool(){}
virtual ~PcieLogger() = default;
virtual u_int32_t AddParserParams() override;
u_int32_t Run() override;
};
PciTest.cpp:
#ifdef _WIN32
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
printf("PciTest::DllMain\n");
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
// DisconnectFromDriver();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
#endif
int PciTest::main(PciTest& test, int argc, char* argv[]) {
printf("PciTest::main\n");
testInstance = &test;
int status = 0;
try {
status = status || test.AddParserParams();
status = status || test.ParseArgs(argc, argv);
status = status || test.InitResources(argv[0]);
status = status || test.Run();
} catch (exception& e) {
test.mainExceptionTagsHandle(e.what());
status = 1;
}
test.handleTestFinish(status);
return status;
}
Когда я пытаюсь запустить windbg на моем исполняемом файле, я получаю следующее:
(558.20fc): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
*** ERROR: Symbol file could not be found. Defaulted to export symbols for
z:\compiled\libpci_test.dll -
libpci_test!ZN7PciTest4mainERS_iPPc+0x3c53b:
00000000`00f6592b 64488b042500000000 mov rax,qword ptr fs:[0]
fs:00000000`00000000=????????????????
0:000>