首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我得到一个未定义的引用,尽管一切似乎都好?(C++明威)

为什么我得到一个未定义的引用,尽管一切似乎都好?(C++明威)
EN

Stack Overflow用户
提问于 2022-06-16 17:16:36
回答 1查看 71关注 0票数 1

我的问题很简单,我正试图编写一个打包器,并且需要解析PE文件,所以我尝试使用C++ pe-解析库

我按照说明构建它,现在我尝试将它链接到我的简单main.cpp文件:

代码语言:javascript
复制
#include <pe-parse/parse.h>

int main(int ac, char **av)
{
    peparse::parsed_pe *p = peparse::ParsePEFromFile(av[0]);
    return 0;
}

以下是我的文件结构:

代码语言:javascript
复制
.
├── 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),my库也是( pe-parse.dllpe-parse.libpei-x86-64)

当我跑的时候

代码语言:javascript
复制
g++ -Wall -Wextra .\src\main.cpp -I.\include\ -L.\bin\ -lpe-parse

从根目录中,我得到以下链接错误:

代码语言:javascript
复制
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链接的导入库,但我找不到一种方法。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-16 19:19:08

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

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

您唯一的选择是用一个编译器重新编译所有的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72649616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档