URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7794
[ Назад ]

Исходное сообщение
"линковка с динамической библиотекой"

Отправлено flighter , 24-Дек-08 01:06 
Уважаемые Гуру прошу Вашей помощи.
есть библиотека написанная на С++ и собрана g++
//file func.cpp
#include<iostream>
void func()
{
std::cout<<"Hi\n";
}
g++ -shared -fPIC -o libtest func.cpp

и есть программа написанная на чистом си
//file main.c
extern void func();
int main()
{
func();
return 0;
}

Вопрос:
как подключить библиотеку?
при компиляции
gcc main.c -L. -ltest -o test
получаем
gcc  main.c -L. -ltest
/tmp/ccEMHBvz.o: In function `main':
main.c:(.text+0x12): undefined reference to `func'
collect2: выполнение ld завершилось с кодом возврата 1

c g++ линкуется нормально.
Но для решения задачи нужно собрать приложение именно с gcc


Содержание

Сообщения в этом обсуждении
"линковка с динамической библиотекой"
Отправлено const86 , 24-Дек-08 03:02 
extern "..."
name mangling
overloading

"линковка с динамической библиотекой"
Отправлено flighter , 24-Дек-08 10:57 
>extern "..."
>name mangling
>overloading

Спасибо
вот код
#include<iostream>
extern "C" {
void f1()
{
  std::cout<<"Hi\n";
}
}


"линковка с динамической библиотекой"
Отправлено Fuzzy , 24-Дек-08 11:46 
>для решения задачи нужно собрать приложение именно с gcc

Надо включить c++ библиотеку и взять c++ места в extern "C" {}

gcc ... -lstdc++


"линковка с динамической библиотекой"
Отправлено Fuzzy , 24-Дек-08 12:04 
Тоесть наоборот, extern "C" нужен для включения C в C++, для C ничего делать не нужно.