问题描述
我想用C / C ++学习Core Foundation。
我使用JetBrains CLion使用CMAKE。
问题是 - 我不知道如何在Mac上的C / C ++ Makefile项目中包含合适的静态库。 p>
我需要将静态库CFNetwork链接到我的项目,以修复链接问题。
快速提示?
我的案例:
#include< CFNetwork /CFNetwork.h>
#include< iostream>
int main(){
CFStringRef bodyString = CFSTR(); //通常用于POST数据
CFDataRef bodyData = CFStringCreateExternalRepresentation(kCFAllocatorDefault,
bodyString,kCFStringEncodingUTF8,0);
CFStringRef headerFieldName = CFSTR(X-My-Favorite-Field);
CFStringRef headerFieldValue = CFSTR(Dreams);
CFStringRef url = CFSTR(http://www.apple.com);
CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault,url,NULL);
CFStringRef requestMethod = CFSTR(GET);
CFHTTPMessageRef myRequest =
CFHTTPMessageCreateRequest(kCFAllocatorDefault,requestMethod,myURL,
kCFHTTPVersion1_1);
CFHTTPMessageSetBody(myRequest,bodyData);
CFHTTPMessageSetHeaderFieldValue(myRequest,headerFieldName,headerFieldValue);
CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest);
return 0;
}
我可以编译,但链接器输出以下内容:
/ Applications / CLion EAP.app/Contents/bin/cmake/bin/cmake--build / Users / nickolay / Library / Caches / clion10 / cmake / generated / 3546f185 / 3546f185 / Debug --target test001 - -j 8
扫描目标的依赖关系test001
[100%]构建CXX对象CMakeFiles / test001.dir / main.cpp。 o
链接CXX可执行文件test001
架构x86_64的未定义符号:
_CFHTTPMessageCopySerializedMessage,引用自:
_main in main.cpp.o
_CFHTTPMessageCreateRequest从:
_main in main.cpp.o
_CFHTTPMessageSetBody,引用自:
_main in main.cpp.o
_CFHTTPMessageSetHeaderFieldValue,引用自:
_main in main.cpp.o
_CFStringCreateExternalRepresentation,引用自:
_main in main.cpp.o
_CFURLCreateWithString,引用自:main.cpp中的
_main。 o
___CFConstantStringClassReference,引用自:
main.cpp.o中的CFString
main.cpp.o中的CFString
main.cpp.o中的CFString
CFString in main.cpp.o
main.cpp.o中的CFString
_kCFAllocatorDefault,引用自:
_main in main.cpp.o
_kCFHTTPVersion1_1,引用源自:
_main in main.cpp.o
ld:没有为架构x86_64找到符号
clang:error:linker命令失败,退出代码1(使用-v查看调用)
make [3]:*** [test001]错误1
make [2]:*** [CMakeFiles / test001.dir / all]错误2
make [1] * [CMakeFiles / test001.dir / rule]错误2
make:*** [test001]错误2
感谢这个资源:
这是我的CMAKE文件看起来像和一切链接:
cmake_minimum_required(VERSION 2.8.4)
项目(test001)
set(CMAKE_CXX_FLAGS$ {CMAKE_CXX_FLAGS} -std = c ++ 11)
set(SOURCE_FILES main.cpp)
find_library(corefoundation_lib CoreFoundation)
find_library(cfnetwork_lib CFNetwork)
set(frameworks
$ {cfnetwork_lib}
$ {corefoundation_lib})
add_executable(test001 $ {SOURCE_FILES })
target_link_libraries(test001 $ {frameworks})
I am trying to learn Core Foundation with C/C++.I use JetBrains CLion that uses CMAKE.
The problem is - I dunno how to include proper static libraries in C/C++ Makefile project on Mac.
I need to link static library CFNetwork to my project in order to fix linking problems.
Could you give me a quick hint?
My case:
#include <CFNetwork/CFNetwork.h>
#include <iostream>
int main() {
CFStringRef bodyString = CFSTR(""); // Usually used for POST data
CFDataRef bodyData = CFStringCreateExternalRepresentation(kCFAllocatorDefault,
bodyString, kCFStringEncodingUTF8, 0);
CFStringRef headerFieldName = CFSTR("X-My-Favorite-Field");
CFStringRef headerFieldValue = CFSTR("Dreams");
CFStringRef url = CFSTR("http://www.apple.com");
CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
CFStringRef requestMethod = CFSTR("GET");
CFHTTPMessageRef myRequest =
CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL,
kCFHTTPVersion1_1);
CFHTTPMessageSetBody(myRequest, bodyData);
CFHTTPMessageSetHeaderFieldValue(myRequest, headerFieldName, headerFieldValue);
CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest);
return 0;
}
I can compile this but linker outputs me the following:
"/Applications/CLion EAP.app/Contents/bin/cmake/bin/cmake" --build /Users/nickolay/Library/Caches/clion10/cmake/generated/3546f185/3546f185/Debug --target test001 -- -j 8
Scanning dependencies of target test001
[100%] Building CXX object CMakeFiles/test001.dir/main.cpp.o
Linking CXX executable test001
Undefined symbols for architecture x86_64:
"_CFHTTPMessageCopySerializedMessage", referenced from:
_main in main.cpp.o
"_CFHTTPMessageCreateRequest", referenced from:
_main in main.cpp.o
"_CFHTTPMessageSetBody", referenced from:
_main in main.cpp.o
"_CFHTTPMessageSetHeaderFieldValue", referenced from:
_main in main.cpp.o
"_CFStringCreateExternalRepresentation", referenced from:
_main in main.cpp.o
"_CFURLCreateWithString", referenced from:
_main in main.cpp.o
"___CFConstantStringClassReference", referenced from:
CFString in main.cpp.o
CFString in main.cpp.o
CFString in main.cpp.o
CFString in main.cpp.o
CFString in main.cpp.o
"_kCFAllocatorDefault", referenced from:
_main in main.cpp.o
"_kCFHTTPVersion1_1", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [test001] Error 1
make[2]: *** [CMakeFiles/test001.dir/all] Error 2
make[1]: *** [CMakeFiles/test001.dir/rule] Error 2
make: *** [test001] Error 2
Finally resolved.
Thanks to this resource: http://raycast.net/clion-multiple-binaries
This is how my CMAKE file looks like and everything links:
cmake_minimum_required(VERSION 2.8.4)
project(test001)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
find_library(corefoundation_lib CoreFoundation)
find_library(cfnetwork_lib CFNetwork)
set(frameworks
${cfnetwork_lib}
${corefoundation_lib})
add_executable(test001 ${SOURCE_FILES})
target_link_libraries(test001 ${frameworks})
这篇关于如何在Mac OS X上的CMAKE项目中包含C静态库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!