如何在 MAC OS X 上的 CMAKE 项目中包含 C 静态库
How to include C static libraries in CMAKE project on MAC OS X
我正在尝试用C/C++学习Core Foundation。我使用使用CMAKE的JetBrains CLion。
问题是 - 我不知道如何在 Mac 上的 C/C++ Makefile 项目中包含适当的静态库。
我需要将静态库 CFNetwork 链接到我的项目以解决链接问题。
你能给我一个简短的提示吗?
我的情况:
#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;
}
我可以编译它,但链接器输出我以下内容:
"/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
终于解决了。
感谢这个资源:http://raycast.net/clion-multiple-binaries
这就是我的 CMAKE 文件的样子,所有链接:
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})
我不是 100% 确定这是否是您想要的,但是您可以通过向编译器提供 -llibrary 标志来链接 C 静态库,其中库文件的名称是 liblibrary.a。如果库不在某个默认库位置(idk 适用于 mac),则可以使用 -L 标志指定路径。
相关文章:
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 在Visual Studio C++项目中包含源库的正确方法是什么?
- 如何将 jsoncpp 库包含在 unix 上的项目中?
- 如何在 c++ 项目中包含一个包含所有头文件?
- 如何将外部代码包含在虚幻引擎4 C++项目中
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 我怎样才能简单地将opencv 包含在我的项目中与CMake
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 是否可以在 Xcode C++项目中包含框架?
- 如何将 glfw 库包含在C++项目中?
- 如何在其他Visual Studio项目中包含CMake lib/projects?
- 相同的代码,不同的结果?从其他项目包含有什么问题?
- 如何有条件地为 Eclipse 中的交叉编译项目包含两个不同名称的相同版本的库
- 如何将boost项目包含在我的c++代码中
- C++项目 - 包含 SQL 类文件的位置
- Visual Studio: c++项目包含路径在存储库上共享
- Visual studio 2010安装项目包含不同体系结构的dll
- 如何在visual studio 2012中将一个项目包含到另一个项目中
- git clone修改eclipse C/ c++项目包含路径
- 项目包含的库文件多于dll文件