Я пытаюсь скомпилировать библиотеку C, а затем ей понравился какой-то внешний код C, и у меня возникли проблемы с моим внешним кодом, находящим символы в библиотеке.Я не понимаю большой щелчок и надеюсь, что кто-то может помочь.Вот подробности:
1) Я работаю на Mac.Я скомпилировал библиотеку как статическую библиотеку .a в xcode.
2) Я пытаюсь скомпилировать функции вызова внешнего кода из библиотеки.Я включил заголовочный файл, и я указываю его местоположение и библиотеку в вызове gcc.Компиляция, кажется, завершается нормально, но не удается установить связь, указывая, что символы не могут быть найдены.
3) Отсутствующие символы перечислены как _FunctionName, где FunctionName - это имя функции, которую я вызвал.
Мне не понятно, почему компилятор / компоновщик добавил подчеркивания к именам моих функций.Но мое наивное предположение состоит в том, что символы не могут быть найдены в библиотеке.
Компиляция внешнего кода выполняется с помощью функции MATLAB mex (), которая выполняет вызовы gcc ниже в фоновом режиме.
Буду благодарен за любые мысли, которые могут возникнуть у кого-либо.
gcc-4.2 -c -Igsf_0303/ -I/Applications/MATLAB_R2011b.app/extern/include \
-DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -arch x86_64 -isysroot \
/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions \
-DMX_COMPAT_32 -O2 -DNDEBUG "gsf_tester.c"
gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl, \
-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,\
-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map \
-o "gsf_tester.mexmaci64" gsf_tester.o gsf_0303/libgsf.a \
-L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
Undefined symbols:
"_gsfOpen", referenced from:
_mexFunction in gsf_tester.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
mex: link of ' "gsf_tester.mexmaci64"' failed.