0

我在网上搜索了很多,但没有找到解决我问题的方法。我的目标是在 C++ 中创建一个简单的类并在 Swift 上使用它。为此,我确实遵循了本教程-> http://www.swiftprogrammer.info/swift_call_cpp.html(非常好)。基本上我已经按照以下步骤操作:

  1. 创建junk.cppjunk.h文件
  2. 编译使用g++ or/and clang++
  3. 创建 .a 文件:$ ar r libjunkcpp.a junk.o
  4. 链接到 Xcode 中Build Phases -> Link Binary With Libraries -> Add

因此,当我这样做时,Xcode 不会编译更多我的项目,在 Xcode 的左侧会出现错误消息:

链接器命令失败,退出代码为 1(使用 -v 查看调用)

在日志中,错误消息是:

ld:档案没有架构 x86_64 的目录文件'/Users/augustosansoncadini/Documents/XcodeProjects/Ex_cpp_Swift_CmdLineTool/junk/libjunkcpp.a'

我认为需要编译到它的架构但是当我输入g++ -v结果是:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

所以我得出结论,架构目标是正确的。

我认为这张图片可以提供帮助:

在此处输入图像描述

注意: 当我.a从 Link Binary With Libraries 中删除文件时,代码编译得很好。

4

2 回答 2

1

您错过的是ranlib对生成目录的命令的调用:

$ ranlib libjunkcpp.a

和命令必须始终成对出现arranlib

于 2018-12-06T11:46:50.010 回答
1

在http://www.swiftprogrammer.info/swift_call_cpp.html的同一教程结束时遇到了类似的问题。

但是我在构建项目时遇到的错误是:

ld: library not found for -ljunkcpp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

不知道“ljunkcpp”命名(与“ lib junkcpp”)突然来自哪里,但我解决它的方法是:

  1. libjunkcpp.a彻底删除。
  2. 再次编译g++ -c junk.cpp
  3. 再次运行ar r hellocpp.a junk.o(注意不同的hellocpp.a文件名)。
  4. 删除了旧的构建阶段链接到libjunkcpp.a.
  5. hellocpp.a而是在Link Binary With Libraries中链接。重建并运行。
Hello, World!
The integer from C++ is 1234

一定是一些名字冲突。希望这可以帮助某人。

于 2019-04-28T14:07:06.157 回答