在Makefile中链接cURL
Linking cURL in Makefile
我需要链接cURL在Ubuntu 11.04后安装cURL的源代码。
.
问题的修正
首先我发现-l必须出现在-l之前,然后我发现我没有在makefile中输入变量。
.
获取cURL配置:
在我的终端上:
# curl-config --libs
-L/usr/local/lib -lcurl
# curl-config --cflags
-I/usr/local/include
没关系,这个目录里面有文件cURL.
我的Makefile:
# Testing cURL
# MAKEFILE
# C++ Compiler (Default: g++)
CXX = g++
CFLAGS = -Wall -Werror
# Librarys
INCLUDE = -Iusr/local/include
LDFLAGS = -Lusr/local/lib
LDLIBS = -lcurl
# Details
SOURCES = src/main.cpp
OUT = test
all: build
build: $(SOURCES)
$(CXX) -o $(OUT) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(SOURCES)
我的c++源代码:
#include <iostream>
#include <curl/curl.h>
int main( void )
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return 0;
}
和ERROR:
# make
g++ -o test -Iusr/local/include -Wall -Werror -Lusr/local/lib src/main.cpp
/tmp/ccli90i2.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `curl_easy_init'
main.cpp:(.text+0x31): undefined reference to `curl_easy_setopt'
main.cpp:(.text+0x3d): undefined reference to `curl_easy_perform'
main.cpp:(.text+0x4d): undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: ** [build] Erro 1
我知道这是一个没有找到库的错误,但对我来说一切都是正确的
应该可以了。你以前没有链接到cURL。
build: $(SOURCES)
$(CXX) -o $(OUT) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $(SOURCES)
注意添加了 $(LDLIBS)
。
哦,我应该补充一下,基本上发生的事情是你抛弃了GNU make的内置规则(参见make -np
的输出)并定义了你自己的规则。如果您想依靠各自的变量来控制构建,我建议您使用内置的变量,或者为了简洁起见,您仍然将其分为编译和链接步骤。
简要说明:GNU make附带了一个规则,说明如何从.cpp
(或.c
)文件生成.o
文件。所以你的make文件可能会被重写为(大约)
# Testing cURL
# MAKEFILE
# C++ Compiler (Default: g++)
CXX = g++
CFLAGS = -Wall -Werror
# Librarys
INCLUDE = -I/usr/local/include
LDFLAGS = -L/usr/local/lib
LDLIBS = -lcurl
# Details
SOURCES = src/main.cpp
OUT = test
.PHONY: all
all: build
$(OUT): $(patsubst %.cpp,%.o,$(SOURCES))
这将生成名为test
(OUT
的内容)的二进制文件,否则将使用内置规则。Make从.o
文件的使用推断出必须有源文件,将查找并编译它们。因此,这个构建将隐式地为每个.cpp
文件运行一次调用,并为链接步骤运行一次调用。
下面的路径开头缺少斜杠
-I/usr/local/include
-L/usr/local/lib
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- C++ CURL 库链接器错误,但包含正确的库
- G++ 无法链接 curl lib 文件
- CURL 静态链接未解析的外部符号
- Visual Studio 2015 curl不会静态链接
- 在C++中链接cURL
- 使用静态构建curl链接项目
- Curl-openssl编译会产生大量链接器错误
- GCC与kerberos链接,用于使用CURL静态编译
- 链接Curl到Windows上的代码块
- C++ cURL 链接错误"unresolved external symbol _curl_easy_"
- 在Makefile中链接cURL