- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不知道如何将静态 libcurl 库正确添加到我的 Code::Blocks IDE。我希望它是静态的,因为在我的程序运行期间不需要默认情况下不包含在 Windows 中的 .dll 文件。我正在使用这个 libcurl: http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (没有 OpenSSL 的 minGW)
这是我的全局编译器设置:http://img845.imageshack.us/img845/1381/halpr.jpg
我收到以下错误:
ld.exe||cannot find -lCURL_STATICLIB| ||=== Build finished: 1 errors, 0 warnings ===|
编译这段代码时:
include <stdio.h>
include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
显然它没有找到 CURL_STATICLIB,因此我不知道为什么。我什至不确定是否需要将 CURL_STATICLIB 添加到我的链接器设置中(我在其他论坛上阅读过)。我发现有些人有同样的问题,但在任何地方都没有得到正确的回答:
stackoverflow.com/questions/4176503/frustrated-with-libcurl
forums.codeblocks.org/index.php?topic=11391.0
old.nabble.com/gcc-working-with-libcurl-td20506927.html
forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html
我已经厌倦了与此抗争,请帮助我。
编辑:
你好 Victor,谢谢你的回复!
我会尽量写得详细一点,以免造成误会。因此,这是我的 C:\libs\文件夹的目录/文件夹树的图像:
http://img199.imageshack.us/img199/6977/curl1.png
可以看到,它还包括构建日志,你会注意到这次的错误是与我之前发布的不同。这是因为我更改了全局编译器和构建项目设置。
我的新构建项目设置:http://img863.imageshack.us/img863/4404/buildoptions.png我的新全局编译器设置:http://img225.imageshack.us/img225/4926/curl2.png
我确信我配置了错误的这些设置,这就是我无法编译它的原因。
最佳答案
好的,我成功地使用 libcurl 使用静态链接构建了您的示例。完成这项工作所涉及的细节非常复杂——正确设置它对于粗心的人来说可能会很棘手。
以下是我用来完成这项工作的步骤,请务必仔细遵循:
转到项目构建选项->编译器设置->#defines:输入CURL_STATICLIB
。定义后,libcurl.h header 将对其函数签名进行预处理以适应静态链接。否则,假定为动态链接,然后损坏的名称变为 _imp__*
。屏幕截图中 Unresolved 错误表明它正在尝试动态链接而不是所需的静态链接。
在 Project build options->Linker settings->Link libraries 下,确保它包含以下内容:curl、rtmp、idn、ssl、ssh2、crypto、z、ws2_32 , wldap32, winmm, gdi32。请注意,顺序很重要。由于 gnu 链接器的设计缺陷,需要首先列出最依赖的库,然后是最不依赖的库。 msvc link 和 borland 的 ilinker 等其他链接器不会出现此类问题——这些库可以按任何顺序列出。
在 Project build options->Linker settings->Other linker options 下添加“-static”。这将确保使用“idn”的静态版本。如果省略此开关,则您编译的程序可能依赖于“libidn-11.dll”来运行,这可能不是您想要的。
此时,您应该能够毫无问题地编译和链接 libcurl 程序。有几件事值得一提,
在 Other linker options 下,不需要您屏幕截图中的其他额外开关。 “libcurl.a”已被列出并包含在链接库中。
“libcrypto.a”似乎包含与“libeay32.a”相同的引用,因此只需要其中一个。但是,'libeay32.a' 尽管它的大小较大,但会导致动态链接。如果您希望您的应用程序“完全独立”,请使用“libcrypto.a”,而不是像屏幕截图中那样。
如果您以后希望动态链接,只需将链接库 下的列表替换为“curldll”并删除CURL_STATICLIB
定义。不需要额外的库(例如 ssl、idn、rtmp 等),因为 libcurl.dll 已经涵盖了它们。
通过使用代码块的用户模板,您可以避免新 libcurl 程序的繁琐易错设置。 (例如,文件->新建->项目->用户模板)
希望这能一劳永逸地解决您在使用 libcurl 时遇到的任何构建问题。
关于c++ - 将静态 libcurl 添加到 Code::Blocks IDE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243638/
我的 blockly.js 文件中有以下代码 Blockly.Blocks['account_number'] = { // Other type. init: function() {
首先抱歉我的英语不好,我正在开发 Image Splitter 应用程序并且已经完成,但是现在的要求是当图像被分割(分成几 block /chunks)那么图像 block 的每一 block (ch
#value: 消息的返回值,当发送到一个 block 时,是该 block 中最后一句话的值。所以 [ 1 + 2. 3 + 4. ] value 计算结果为 7。我发现有时很难使用。有没有办法显式
我想构建一个包含 3 div 的响应式导航栏相同的 width和 height . 我申请了 inline-block到每个 block ,我得到一个我不理解的行为。 问题是,第三 block 由 2
我希望使用 Blockly 来允许非技术人员用户指定测试脚本。 它的一部分需要一个文件选择器,但是,我看不到 Blockly 有一个。是吗? 实际上,我找不到完整的标准 block 列表。谁有网址?
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
我想创建一个具有不同背景颜色 block 和不同悬停颜色 block 的导航栏 block 。我可以分别创建不同的悬停颜色 block 或不同的背景颜色 block ,但不能一起创建。所以请告诉我如何
我正在使用看到的代码 here定期执行代码: #define DELAY_IN_MS 1000 __block dispatch_time_t next = dispatch_time(DISPATC
为什么 block 必须被复制而不是保留?两者在引擎盖下有什么区别?在什么情况下不需要复制 block (如果有)? 最佳答案 通常,当您分配一个类的实例时,它会进入堆并一直存在,直到它被释放。但是,
我想弄清楚我这样做是否正确: 如果我有一个 block ,我会这样做: __weak MyClass *weakSelf = self; [self performBlock:^{
我想制作一个 4 block 导航菜单,虽然我已经显示了一个 block ,然后单击打开第二个 block ,从第二个开始选择并再次单击出现第三个 block ,第四个 block 相同...这是我的
例如,这样更好吗? try { synchronized (bean) { // Write something } } catch (Int
我想让一只乌龟检查前方小块的颜色并决定移动到哪里。如果前面的补丁不是白色的,那么乌龟向左或向右旋转并移动。我的 If 决策结构中出现错误,显示“此处应为 TRUE?FALSE,而不是 block 列表
我想创建一个 block 对角矩阵,其中对角 block 重复一定次数,非对角 block 都是零矩阵。例如,假设我们从一个矩阵开始: > diag.matrix [,1] [,2] [
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我创建了一个等距环境,全部使用 Javascript 和 HTML5 (2D Canvas),大部分情况下工作正常。我面临的问题是使用不同高度的图 block ,然后对图 block 上的对象索引进行
这是令我困惑的代码: public Integer getInteger(BlockingQueue queue) { boolean interrupted = false; try
我有一个基于 TPL 数据流的应用程序,它仅使用批处理 block 和操作 block 就可以正常工作。 我已经添加了一个 TransformBlock 以尝试在发布到批处理 block 之前从源中转
我是一名优秀的程序员,十分优秀!