为什么我得到一个未定义的引用,尽管一切看起来都很好?(C++ Mingw)

Why do I get an undefined reference although everything seems alright ? (C++ Mingw)

提问人:gz6876 提问时间:6/17/2022 最后编辑:gz6876 更新时间:6/17/2022 访问量:426

问:

我的问题相当琐碎和简单,我正在尝试编写一个打包器,为此我需要解析 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-mingw32pei-x86-64pe-parse.dllpe-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

当我跑步时,我能够找到符号。 不包含任何内容,我试图用nmpe-parse.libpe-parse.dll-L.\bin\-L.\lib\

有什么想法吗?我相信这是一个必须与 链接的导入库,但我找不到方法。.lib.dll

谢谢。

C G++ 链接器错误 可移植可执行文件

评论

0赞 Quimby 6/17/2022
如果你添加呢?-L.\lib\
1赞 gz6876 6/17/2022
此命令@Quimby同样的问题:g++ -Wall -Wextra .\src\packer.cpp -I.\include\ -L.\bin\ -L.\lib\ -lpe-parse
0赞 Quimby 6/17/2022
啊,我没有看到编辑,你能查看 dll/lib 以查看该符号是否真的存在并已导出吗?
1赞 gz6876 6/17/2022
@Quimby 感谢您的尝试,至少我知道问题与我的 Windows 环境有关
1赞 gz6876 6/17/2022
@AlexanderGuyer ld 文档中,在直接链接到 dll 下,您可以看到不一定需要 lib 前缀才能识别,我认为只有库才需要它。如果我使用 进行编译,则错误保持不变,但是无论是否使用任何库都找不到该库.lib.ag++ [...] -L -lpe-parse-L.-L

答:

0赞 n. m. could be an AI 6/17/2022 #1

您有一个由 MSVC 生成的库,并且您正在尝试使用 g++ 与它链接。

Microsoft C++编译器与 G++ 不兼容。其中一个生成的对象不能使用另一个编译的对象。它们使用截然不同的 ABI 和不同的标准库实现。

您唯一的选择是使用一个编译器重新编译所有内容。