从C+创建一个Swift共享框架+;图书馆 我有一个C++共享库,它可以为iOS进行交叉编译,我想把它封装成一个共享框架。其思想是,当一些Swift代码连接到该库时,该库应该在后台线程中运行服务器

从C+创建一个Swift共享框架+;图书馆 我有一个C++共享库,它可以为iOS进行交叉编译,我想把它封装成一个共享框架。其思想是,当一些Swift代码连接到该库时,该库应该在后台线程中运行服务器,c++,ios,swift,cmake,C++,Ios,Swift,Cmake,在我看来,共享框架正是我想要的,但我不知道如何创建它和相应的桥接头,以便能够从Swift启动服务器 理想情况下,我想从CMake创建它,如下所示。然而,在我看来,当我这样做时,链接器完全忽略了我的框架(我只设置了framework和framework\u VERSION,但我不认为这是忽略它的原因)。我是这样做的: add_library(dynamicFramework SHARED dynamicFramework.c ) set_target_properties(dyna

在我看来,共享框架正是我想要的,但我不知道如何创建它和相应的桥接头,以便能够从Swift启动服务器

理想情况下,我想从CMake创建它,如下所示。然而,在我看来,当我这样做时,链接器完全忽略了我的框架(我只设置了
framework
framework\u VERSION
,但我不认为这是忽略它的原因)。我是这样做的:

add_library(dynamicFramework SHARED
        dynamicFramework.c
)
set_target_properties(dynamicFramework PROPERTIES
    FRAMEWORK TRUE
    FRAMEWORK_VERSION C
)

我也尝试从XCu码中创建一个共享框架,并在其中添加我的C++共享库,但是当我的C++库是30M时,结果框架二进制是50K,所以我猜它并没有真正把它放在框架内。


是否有任何文档表明,理论上甚至可以实现这一点?

您应该使用
nm
检查框架二进制文件,例如:
nm MyLib.framework/MyLib
。它将显示框架中包含的所有符号。这样你就可以检查是否有东西丢失了

可以使用以下命令创建共享库:

xcrun --sdk iphoneos clang -arch armv7 -arch arm64 -c -o hello_arm.o hello.c
xcrun --sdk iphonesimulator clang -arch i386 -arch x86_64 -c -o hello_x86.o hello.c
xcrun --sdk iphoneos ld -arch_multiple -arch arm64 -arch armv7 -dylib -dynamic -all_load -no_arch_warnings -dylib_install_name libhello_arm.so -ios_version_min 11.0 hello_arm.o -o libhello_x86.so
xcrun --sdk iphonesimulator ld -arch_multiple -arch i386 -arch x86_64 -dylib -dynamic -all_load -no_arch_warnings -dylib_install_name libhello_arm.so -ios_version_min 11.0 hello_arm.o -o libhello_arm.so
xcrun --sdk iphoneos lipo libhello_arm.so libhello_x86.so -create -output libhello.so
现在,您可以根据以下内容创建目录结构,从共享库创建共享框架:


其中
MyFramework
文件是上面创建的共享库。

所有符号都在那里=/好吧,我在过去两天里一直在尝试。我一直在尝试从Xcode和CMake创建一个框架。唯一一个似乎嵌入到应用程序中的是由cmake创建的,但在运行时找不到它(请参见此处:)=/。所以我正在寻找一些示例/文档,因为我现在有点卡住了。我通过Makefile创建了一个静态框架(带有独立于位置的代码),解决了这个问题。然后,我在Xcode中创建了一个共享框架目标,其中包括静态库?那么您是手动生成框架的吗?共享框架的目的不是允许共享lib吗?那么你是说因为这个错误你放弃了做共享框架?
 MyFramework.framework/
     Headers/
     Base.lproj/
     de.lproj/
     en.lproj/
     Info.plist
     MyFramework