Я создал динамическую сетевую библиотеку на C. Когда я пытаюсь связать ее в своей программе на C ++, я получаю неопределенную ссылку при первом вызове одной из своих функций в библиотеке. Что я не могу понять, так это то, что я создал небольшую тестовую программу на C, которая использует библиотеку, и она прекрасно связывается.
Может ли кто-нибудь помочь с моей проблемой? Вот шаги, которые я предпринял, чтобы создать свою библиотеку и связать ее.
Создание библиотеки:
- Код моей библиотеки
- Скомпилируйте с помощью строки: gcc -c -fPIC -g -Wall ./libnet.c
- Свяжите объектный файл моей библиотеки и создайте общий объектный файл с помощью строки: gcc -shared -o libnet.so -g -Wall ./libnet.o
Переместите мою библиотеку в соответствующие папки и установите LD_LIBRARY_PATH:
- Я копирую свою библиотеку в две директории. Один каталог - это тестовая программа C, которая правильно связывает, а другой - программа C ++, которая не связывается должным образом.
- Я установил переменную среды LD_LIBRARY_PATH для обоих каталогов, которые используют библиотеку
Скомпилируйте и свяжите мою программу:
- Код моей программы
- Скомпилируйте все мои файлы .cpp со строкой: g ++ -c -g -Wall ./
- Свяжите все мои объектные файлы и общую библиотеку, чтобы создать мою программу, с помощью строки: g ++ -o -g -Wall -L./ -lnet
Вот файл make, который я использую. Может, у меня здесь что-то не так?
PPFLAGS = -g -Wall
TARGET = msgfrwdserver
OBJS = msgfrwdserver.o
msgfrwdhelper.o msgfrwd.o climsgfrwd.o
LIBS = libnet.so
CPPLP =
-L / USR / дома / Крис / разработка / легенды / сервера / монитор
-L / USR / дома / Крис / разработка / легенды / сервера / msgfrwd
CPPFILES = ./msgfrwdserver.cpp
./msgfrwdhelper.cpp
./classes/msgfrwd.cpp
./classes/climsgfrwd.cpp
CPPIP = -I./classes
-I / USR / дома / Крис / разработка / легенды / ЛИБНЕТ
все: $ {OBJS} $ {TARGET}
$ {TARGET}: $ {OBJS} $ {LIBS}
г ++ -о
$ {TARGET} $ {PPFLAGS} -L./-lnet
$ {CPPIP} $ {OBJS}
msgfrwdserver.o: ./msgfrwdserver.cpp
g ++ -c $ {PPFLAGS} $ {CPPIP}
./msgfrwdserver.cpp
msgfrwdhelper.o:
./msgfrwdhelper.cpp
g ++ -c $ {PPFLAGS}
./msgfrwdhelper.cpp
msgfrwd.o:
./classes/msgfrwd.cpp
г ++ -с
$ {PPFLAGS} ./classes/msgfrwd.cpp
climsgfrwd.o: ./classes/climsgfrwd.cpp
g ++ -c $ {PPFLAGS} $ {CPPIP}
./classes/climsgfrwd.cpp
clean: rm
-rf $ {TARGET} * .o * ~ .core ./classes/~
Я действительно понятия не имею, в чем может быть проблема. Любая помощь приветствуется. Нужно ли что-то делать по-другому, чтобы библиотека C работала с программой на C ++?
Извините, что файл make грязный. Я не очень хорошо переводил, когда пытался заблокировать цитату или сказать, что это был пример кода.