jma*_*erx 2 c++ objective-c cmake
我正在努力为我的 gui api 添加跨平台剪贴板支持。我设法让它在 Windows 上运行良好,现在我在 OSX 上运行。
我已经让函数按照我想要的方式工作,但文件是 .mm 。因此,当人们编译我的 gui 的 OSX 版本时,他们现在需要链接到 cocoa 库。
有谁有在使用 cmake 并将 c++ 与 Objective-c 混合时如何链接到 cocoa 的经验?
谢谢
您可以将一些编译器开关传递给 gcc 或 clang 来启用 Objective C 或 Objective C++ 应用程序的编译:
gcc -ObjC MySourceFile.m
gcc -ObjC++ MySourceFile.mm
clang -ObjC MySourceFile.m
clang -ObjC++ MySourceFile.mm
Run Code Online (Sandbox Code Playgroud)
您可以使用以下选项指定应用程序可以运行的最低 MacOSX 版本:
gcc -ObjC++ -mmacosx-version-min=10.6
Run Code Online (Sandbox Code Playgroud)
如果您希望您的应用程序与 Snow Leopard 兼容,请指定 10.6。您还需要将 sysroot 选项传递给 gcc 或 clang,让它们知道要编译哪个版本的 SDK:
gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk
Run Code Online (Sandbox Code Playgroud)
玩具通过 arch 选项指定要构建的架构
gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64
Run Code Online (Sandbox Code Playgroud)
如果单独调用链接器 ld,则需要将 sysrootlib 选项传递给 ld。要生成动态链接库,请将 dylib 选项传递给 ld。如果您将dynamiclib 传递给gcc 或clang,则该值会传递给ld。
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64
Run Code Online (Sandbox Code Playgroud)
要链接到 Cocoa 框架,您可以将框架选项作为链接器选项传递给 gcc 和框架的名称:
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -Wl,-framework,Cocoa
Run Code Online (Sandbox Code Playgroud)
如果您使用 C++ 标准库,则需要将其指定为链接器选项
-Wl,stdc++
Run Code Online (Sandbox Code Playgroud)
当部署到 MacOSX 10.7 并使用 clang 编译时,您可以使用 libc++ C++ 标准库。您将选项传递给编译器和链接器:
-stdlib=libc++ -Wl,c++
Run Code Online (Sandbox Code Playgroud)
因此,要从源代码生成一个链接到 Cocoa 框架的库,您可以使用 gcc 执行以下操作
gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -o MyLibrary.dylib -Wl,-framework,Cocoa MySourceFile.mm
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |