В сети много вопросов по этому поводу, но я не смог решить свою проблему. Я изучаю это несколько дней.
Я хочу запустить простой класс C++ в проекте Swift, для этого я следовал этому руководству: http://www.swiftprogrammer.info/swift_call_cpp.html. В основном я выполнил следующие шаги:
- Создайте файлы
junk.cpp
иjunk.h
- Скомпилируйте с помощью
g++ or/and clang++
- Создайте файл .a с:
$ ar r libjunkcpp.a junk.o
ranlib libjunkcpp.a
- Связан с Xcode в
Build Phases -> Link Binary With Libraries -> Add
При компиляции возникают следующие ошибки:
Undefined symbols for architecture x86_64:
"A::getInt()", referenced from:
_getIntFromCPP in wrapper.o
"A::A(int)", referenced from:
_getIntFromCPP in wrapper.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
барахло.ч
class A {
public:
A(int);
int getInt();
private:
int m_Int;
};
мусор.cpp
#include "junk.h"
A::A(int _i) : m_Int(_i) {}
int A::getInt() {
return m_Int
}
обертка.cpp
#include "junk.h"
extern "C" int getIntFromCPP() {
// Create an instance of A, defined in
// the library, and call getInt() on it:
return A(1234).getInt();
}
мост.ч
int getIntFromCPP();
nm libjunkcpp.a
, что эти символы существуют, и скомпилирован ли он для правильной архитектуры? Кроме того, вы включили в архив иwrapper.o
, иjunk.o
? - person Botje   schedule 06.12.2018nm libjunkcpp.a
показывает:libjunkcpp.a(junk.o):
. В какой архив я должен включить эти.o
файла? - person Augusto   schedule 06.12.2018libjunkcpp.a(junk.o)
: вы должны увидеть список дляA::A
иA::getInt
, хотя и искаженный. Для меня это показывает 0000000000000020 T __ZN1AC1Ei и __ZN1A6getIntEv. - person Botje   schedule 06.12.2018libjunkcpp.a
, я бы рекомендовал удалить ее и построить с нуля, также может помочь публикация команд сборки, которые не работают (Xcode: Вид -> Навигаторы -> Показать навигатор отчетов, не забываем развернуть сообщение об ошибке ;)) - person miadz   schedule 06.12.2018-force_load
, чтобы убедиться, что он не удаляет символы, которые, по его мнению, не используются. Если вы видите, что символы существуют в.a
, но не в конечном продукте, возможно, это та же проблема. (Редактировать: Только что понял, что это старый вопрос. Я столкнулся с этой проблемой примерно в 2018 году, так что в конце концов это может быть та же проблема) - person Human-Compiler   schedule 10.02.2021