我的问题很简单,我正试图编写一个打包器,并且需要解析PE文件,所以我尝试使用C++ pe-解析库。
我按照说明构建它,现在我尝试将它链接到我的简单main.cpp文件:
#include <pe-parse/parse.h>
int main(int ac, char **av)
{
peparse::parsed_pe *p = peparse::ParsePEFromFile(av[0]);
return 0;
}以下是我的文件结构:
.
├── src
│ main.cpp
├── lib
│ pe-parse.lib
├── bin
│ pe-parse.dll
└── include
└ pe-parse
nt-headers.h
parse.h
to_string.hMinGW确实是x64 (x86_64-w64-mingw32),my库也是( pe-parse.dll和pe-parse.lib的pei-x86-64)
当我跑的时候
g++ -Wall -Wextra .\src\main.cpp -I.\include\ -L.\bin\ -lpe-parse从根目录中,我得到以下链接错误:
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
C:\Users\gz\AppData\Local\Temp\ccxml3rK.o:packer.cpp:(.text+0x1f): undefined reference to `peparse::ParsePEFromFile(char const*)'
collect2.exe: error: ld returned 1 exit status当我在nm上运行pe-parse.lib时,我能够找到符号。pe-parse.dll不包含任何内容,我试图用-L.\lib\替换-L.\bin\。
有什么想法吗?我相信.lib是一个必须与.dll链接的导入库,但我找不到一种方法。
谢谢。
发布于 2022-06-16 19:19:08
您有一个由MSVC生成的库,您正在尝试使用g++与其链接。
Microsoft C++编译器与g++不兼容。其中一个生成的对象不能使用另一个对象编译的对象。它们使用非常不同的ABI和不同的标准库实现。
您唯一的选择是用一个编译器重新编译所有的东西。
https://stackoverflow.com/questions/72649616
复制相似问题