Программа C++ получает неопределенную ссылку на динамическую библиотеку C во время компоновкиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Программа C++ получает неопределенную ссылку на динамическую библиотеку C во время компоновки

Сообщение Anonymous »

Я создал динамическую сетевую библиотеку на языке 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 для обоих каталогов, использующих библиотеку
  • Я установил переменную среды LD_LIBRARY_PATH для обоих каталогов, которые используют библиотеку
  • li>
Скомпилируйте и свяжите мою программу:
  • Код моя программа
  • Скомпилируйте все мои .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/home /chris/development/legends/servers/monitor
-L/usr/home/chris/development/legends/servers/msgfrwd

CPPFILES = ./msgfrwdserver.cpp
./msgfrwdhelper.cpp
./classes/msgfrwd.cpp
./classes/climsgfrwd.cpp
CPPIP = -I./classes
-I/usr/home/chris/development/legends/libnet

all: ${OBJS} ${TARGET

${TARGET}: ${OBJS} ${LIBS}

g++ -o
${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

g++ -c
${PPFLAGS} ./classes/msgfrwd.cpp

climsgfrwd.o: ./classes/climsgfrwd. cpp

g++ -c ${PPFLAGS} ${CPPIP}
./classes/climsgfrwd.cpp

clean: rm
-rf ${TARGET} *.o *~ .core ./classes/< /em>~


Я действительно понятия не имею, в чем может быть проблема. Любая помощь будет очень признательна. Нужно ли мне делать что-то по-другому, чтобы библиотека C работала с программой на C++?

Извините, что файл make неряшлив. Я не совсем правильно перевел, когда пытался заблокировать цитирование или сказать, что это пример кода.

Подробнее здесь: https://stackoverflow.com/questions/236 ... ng-linking
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»