我已经创建了一个极简式的C++库,我想在我的Xcode项目中使用它。它有这个目录结构-
library/
- CMakeLists.txt
- build/ // build files will reside here
- iOS.cmake // toolchain file
- core/
- CMakeLists.txt
- squareroot.h
- squareroot.cpp
- platform/
- CMakeLists.txt
- squrerootwrapper.h
- squarerootwrapper.mm项目链接- https://github.com/devojoyti/CMakeLibrary
在build/里面我在做-
cmake ../ -G Xcode -D CMAKE_TOOLCHAIN_FILE=../iOS.cmake -D IOS_PLATFORM=SIMULATORxcodebuild -target install -configuration Debug基本上,我正在构建两个库,一个在core/中,计算一个数字的squareroot,另一个在platform/中,它是C++ squareroot计算库上的一个ObjC包装器。我正在将核心/库链接到平台/库中。
问题:
问题是,我无法将在core/中生成的库与在platform/中生成的库链接起来。代码构建得很好,并且生成了库(以及相应的.h头文件)。
但是,如果我试图在我的Xcode中使用它,它会这样说:

显然,core/库函数在platform/内部是不可访问的。
我尝试过修改C和CXX标志,尝试首先使用find_library添加库,并使用不同的工具链,例如,这里的这 one。
平台规格:
发布于 2022-04-05 09:54:22
好吧,我终于明白问题出在哪里了。
platform/中的库不能解决其对core/的依赖),除非我将两者显式地添加到Xcode中。core/库和platform/)之后,它就开始工作了。Explanation:
- e.g: `libB` depends on `libA` then when linking hello.exe which only calls methods of `libB` you've to specify both `libB.a` AND `libA.a` too for it to work- You'd still have to make sure both .dylibs are in the same directory for `libB.dylib` to load `libA.dylib`因此,要么创建一个动态库,要么在Xcode中添加静态库的所有依赖项。
发布于 2022-04-03 10:03:49
假设libcore_lib.a位于核心/
find_package(CORE core_lib HINTS ${PROJECT_SOURCE_DIR}/core)
include_directories(${PROJECT_SOURCE_DIR}/core)
add_library(pim_ios ${PLATFORM_SOURCES})
target_link_libraries(pim_ios ${CORE})
target_link_libraries(pim_ios PUBLIC "-framework Cocoa" "-framework AppKit" "-framework CoreData" "-framework Foundation")发布于 2022-04-08 08:25:58
在Core/CMakeLists.txt中,可以添加:
target_include_directories(core_lib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)在与core_lib链接的另一个目标中,它将包含目录"Core“。
https://stackoverflow.com/questions/71704144
复制相似问题