【问题标题】:Windows Linking窗口链接
【发布时间】:2024-04-15 01:50:01
【问题描述】:

我正在尝试使用 SCons 来编译和链接一个简单的 Windows 程序。我有两个需要编译的文件,httprequest.cpp 和 curltest.cpp。首先,我想从 httprequest.*pp 文件创建一个库。这些文件依赖于我的源代码中的 libcurl.lib 库。

编译完成后,我会尝试将 curltest.cpp 编译为 .exe(也依赖于 libcurl.lib 库)。但是,我不断收到以下错误:

httpreq.lib(httprequest.obj) : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function "public: __thiscall HTTPRequest::HTTPRequest(void)" (??0HTTPRequest@@QAE@XZ)

尽管明确链接到 libcurl.lib(我已经确认 - 使用 nm - 具有可用的方法 __curl_easy_setopt 等),但当 httpreq.lib 尝试查找 libcurl 方法时,我遇到了问题。

如何将 libcurl.lib 链接到 httpreq 库和 curltest 可执行文件而不会出现问题?

编辑:这是我的 SConstruct 文件,它在 Ubuntu 11.04 下构建和链接都很好。

httpreq = 'src//httprequest.cpp'
StaticLibrary('httpreq', httpreq)
env = Environment(
                    CPPPATH = ['#//include//curl',
                                '#//src'
                                ],

                    LIBPATH = ['#//bin',
                                '#//'
                                ],

                    LIBS = ['libcurl',
                            'httpreq'
                            ]
                )
curltest = ['src//curltest.cpp']
env.Program('test', curltest)

【问题讨论】:

  • 听起来你正在用 C++ 编译一个 C 头文件。将标头包装在 extern "C" 中

标签: c++ curl linker libraries scons


【解决方案1】:

这似乎是libcurl FAQ 中已经回答的问题。

关键是要在windows上使用静态libcurl lib,必须在编译时定义CURL_STATICLIB。

【讨论】: