提问人:gz6876 提问时间:6/17/2022 最后编辑:gz6876 更新时间:6/17/2022 访问量:426
为什么我得到一个未定义的引用,尽管一切看起来都很好?(C++ Mingw)
Why do I get an undefined reference although everything seems alright ? (C++ Mingw)
问:
我的问题相当琐碎和简单,我正在尝试编写一个打包器,为此我需要解析 PE 文件,所以我正在尝试使用 C++ pe-parse 库。
我按照说明构建了它,现在我正在尝试将其链接到我的简单文件: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.h
MinGW 确实是 x64 () 和我的库(对于两者和x86_64-w64-mingw32
pei-x86-64
pe-parse.dll
pe-parse.lib
)
当我运行时
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.\bin\
-L.\lib\
有什么想法吗?我相信这是一个必须与 链接的导入库,但我找不到方法。.lib
.dll
谢谢。
答:
0赞
n. m. could be an AI
6/17/2022
#1
您有一个由 MSVC 生成的库,并且您正在尝试使用 g++ 与它链接。
Microsoft C++编译器与 G++ 不兼容。其中一个生成的对象不能使用另一个编译的对象。它们使用截然不同的 ABI 和不同的标准库实现。
您唯一的选择是使用一个编译器重新编译所有内容。
评论
-L.\lib\
g++ -Wall -Wextra .\src\packer.cpp -I.\include\ -L.\bin\ -L.\lib\ -lpe-parse
.lib
.a
g++ [...] -L -lpe-parse
-L.
-L