MinGW 未定义引用 libcurl

MinGW undefined reference libcurl

所以我用 C++ 编写了一个应用程序来使用列表从 Web 下载 mp3。 它使用 libcurl 来下载它们。

我在 linux。使用

编译
 g++ main.cpp -lcurl -o word2mp3 

工作正常。 我需要一个 windows 可执行文件,但是 运行 x86_64-w64-mingw32-g++ main.cpp -o wordtest returns

undefined reference to `__imp_curl_easy_init'

后面是其他 curl 函数。在命令中添加 -lcurl 也会报错,指出找不到 curl。

我到处都试过了,没有运气,我是初学者。

Link 到我的 github 回购:https://github.com/sharpclone/Word2Mp3

要修复未定义的引用警告,您需要 link 到所需的库,因此 -lcurl 是正确且必需的。

如果编译器找不到库,你需要告诉他在哪里可以找到它,这可以通过传递 -L 后跟库的路径(即目录的路径)来完成libcurl.dll.a 所在的位置)。

参数的顺序也可以相关,我认为正确的顺序应该是-L <path> -lcurl

你需要用MinGW编译libcurl,或者找一个预编译好的。您安装的用于在 Linux 上编译您的应用程序的是使用 Linux 编译器编译的,不适用于 MinGW。

MSYS2 repos 有一堆针对不同风格的 MinGW 的预编译库。

我已经 a script 自动下载这些库,因为它们的包管理器只适用于 Windows。

git clone https://github.com/holyblackcat/quasi-msys2
cd quasi-msys2
make install _gcc _curl
env/shell.sh

cd ..
git clone https://github.com/sharpclone/Word2Mp3
cd Word2Mp3/
win-clang++ main.cpp -lcurl -o word2mp3

这不依赖于外部 MinGW 安装,只需要安装 Clang(和 LLD)(Linux 的常规 Clang,与 GCC 不同,您不需要安装特殊版本cross-compile).

或者,如果您更喜欢现有的编译器,可以停在 make install _curl,然后手动指定已安装库的路径,通常是 -Lquasi-msys2/root/mingw64/lib。您只需要确保 MSYS2 repo you're using 与您的编译器匹配。