У меня есть CMakeList.txt
, который создает статическую библиотеку:
project(SharedComponents C)
cmake_minimum_required(VERSION 3.12)
set(CMAKE_C_STANDARD 99)
include_directories(../include)
add_library(SharedComponents STATIC ATMIDIUtils.c ../include/ATMIDIUtils.h)
ATMIDIUtils.c
void splitMIDIValue(MIDILongValue value, MIDIValue * _Nonnull separated)
{
separated->MSB = (value >> 7) & ATMIDIMaxValue;
separated->LSB = value & ATMIDIMaxValue;
}
ATMIDIUtils.h
void splitMIDIValue(MIDILongValue value, MIDIValue * _Nonnull separated);
Это компилируется нормально.Затем я пытаюсь создать модульный тест и связать его с ним, и он говорит, что символ отсутствует:
Undefined symbols for architecture x86_64:
"splitMIDIValue(unsigned short, MIDIValue*)", referenced from:
ATMIDIUtilsTests_test_split_midi_value_Test::TestBody() in ATMIDIUtilsTests.cxx.o
нм показывает, что символ является внешним:
0000000000000330 (__TEXT,__text) external _splitMIDIValue
Почемувсе символы отсутствуют в моей библиотеке?ATMIDIUtils.c
содержит реализацию функции, но, похоже, она не компилируется в статическую библиотеку.