Я видел ссылку GCC с общей библиотекой C++, но я не могу воспроизвести ее самостоятельно. Таким образом, первым я создаю библиотеку C++ с функцией тестом:Как связать общую библиотеку C++ с gcc
g++ -shared -o libtest.so test.c
Тогда у меня есть основная функция теста, который вызывает функцию библиотеки и скомпилировать его как этот
gcc -o prog.out main.c -L. -ltest
Тогда я получаю ошибку
undefined reference to 'testfunc'
, который, как я думаю, вызван разными ссылками в библиотеке ... C называет функцию testfunc и C++ называет функцию [некоторые вещи] __ testfunc [возможно, снова некоторые вещи].
Я также попытался использовать
gcc -o prog.out main.c -l:libtest.so
, но это приводит к одной и той же ошибки.
Поэтому, мой вопрос: как можно связать библиотеку C++ с gcc с c-файлом?
Обновление: Я знаю, что могу использовать extern "C"
, но это не так, как оно разрешено. Может быть, есть некоторые параметры для компоновщика?
Update2: Просто подумал, что также возможно, что первая часть просто скомпилирована с C++ и связана с gcc. Также попробовал это:
g++ -c testlib.c -o testlib.o
gcc -shared -o libtest.so testlib.o
gcc -o prog.out -l:libtest.so
все еще не работает. Что-то не так с флагами?
дубликат http://stackoverflow.com/questions/1068129/c-library-not-linking-using-gcc-g –
Что вы имеете в виду «это не так, как это решено»? Я говорю вам, что ** это так, как это решено, если только вы не сказали нам. –
@ Dietrich Epp Похоже, что все сделано так, как я писал в Update2. И я уверен, что это не сделано с «extern» - если вы хотите взглянуть на проект: [openjdk] (http://openjdk.java.net/) –