The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"линковка с динамической библиотекой"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"линковка с динамической библиотекой"  
Сообщение от flighter on 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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "линковка с динамической библиотекой"  
Сообщение от const86 (ok) on 24-Дек-08, 03:02 
extern "..."
name mangling
overloading
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "линковка с динамической библиотекой"  
Сообщение от Fuzzy (ok) on 24-Дек-08, 11:46 
>для решения задачи нужно собрать приложение именно с gcc

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

gcc ... -lstdc++

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру