Если вы удалите конструктор cMesh
, тогда вы будете использовать конструктор по умолчанию (без аргумента, без тела) cMesh
, который вам дан. Похоже, что в вашем конструкторе cMesh
есть ошибка сборки или отсутствует код из-за некоторого кода, поэтому библиотека фактически не генерируется, и, возможно, Xcode не сообщает об ошибке. Xcode не умеет сообщать об ошибках компоновщика.
Я бы посоветовал посмотреть, какие символы, по словам компоновщика, отсутствуют, и еще раз проверить, действительно ли они определены в вашем коде. Я предполагаю, что вы используете один из этих символов в своем конструкторе cMesh
. Часто с виртуальными базовыми классами вы можете забыть определить, и реализуют метод или два в дочернем классе. Это может быть связано с отсутствием метода, основанного на вашем шаблоне, или если ваш шаблон не #include
d. Это может скомпилировать нормально, но привести к ошибкам компоновщика, как вы видите.
Если Xcode не отображает полную ошибку компоновщика, покажите Log Navigator ( Команда ⌘ + 7 ), дважды щелкните последнюю запись «Build», выберите Ошибка, а затем нажмите кнопку в крайнем правом углу строки, которая появляется при выборе. Символы должны быть перечислены там. Если нет, то пришло время для xcodebuild
в Терминале.
Если это не в этом случае, мне было бы интересно посмотреть результаты того, будет ли библиотека создаваться для соответствующей архитектуры, или, возможно, это может стимулировать некоторый прогресс:
- В Xcode Organizer Shift ⇧ + Команда ⌘ + 2 , нажмите Projects и найдите путь к DerivedData для вашего проекта.
- В Терминале перейдите в этот каталог (
cd ~/Library/Developer/Xcode/DerivedData/proj-<random value>/
)
- Удалить (или отодвинуть) каталог сборки (
rm -r Build
)
- В Xcode попробуйте собрать с присутствующим конструктором
cMesh
.
- Найти файл продукта библиотеки (
cd Build/Products/<scheme>-iphoneos
)
Ваши скомпилированные статические библиотеки (<libname>.a
) должны находиться в этом каталоге. Если их там нет, они не строят (если вы не разместите свои продукты в другом месте). Если ваши библиотеки есть, давайте подтвердим, что они действительно создаются для соответствующей архитектуры. Запустите otool -vh <library>.a
. Вы должны увидеть что-то вроде:
$ otool -vh libtesting.a
Archive : libtesting.a
libtesting.a(testing.o):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC ARM V7 0x00 OBJECT 3 1928 SUBSECTIONS_VIA_SYMBOLS
Как видите, моя тестовая библиотека была построена для ARMv7.