The OpenNET Project / Index page

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

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

"Возмжно ли использовать библиотеку на С++ в проекте на С?"  +/
Сообщение от worman email(ok) on 20-Май-09, 09:46 
Здравствуйте.

Вопрос:
Можно ли использовать библиотеку, написанную на С++, в проекте написанном на чистом С?
Если да, то как?

Например:

//----- исходник библиотеки -----
//file:  mylib.cpp

#include <stdio.h>
void lib_print(int i)
{
    printf("Hello, boss. Incomming parameter is %d.\n", i);
}

//----- исходник пользователя библиотекой -----
//file:  libuser.c

void lib_print(int i);
int main()
{
    lib_print(20);
    return 0;
}

//----- сборка либы -----
g++ -Wall lib.cpp -c
ar rc libmylib.a lib.o
ranlib libmylib.a

//----- сборка пользователя -----
gcc -Wall -o libuser_c libuser.c -L. -lmylib

ОШИБКА:
./libmylib.a(lib.o):(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Заранее всем спасибо!!!

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

 Оглавление

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


1. "Возмжно ли использовать библиотеку на С++ в проекте на С?"  +/
Сообщение от Аноним (??) on 20-Май-09, 10:44 
>//----- сборка пользователя -----
>gcc -Wall -o libuser_c libuser.c -L. -lmylib

-lstdc++

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

2. "Возмжно ли использовать библиотеку на С++ в проекте на С?"  +/
Сообщение от worman email(ok) on 20-Май-09, 11:16 
>>//----- сборка пользователя -----
>>gcc -Wall -o libuser_c libuser.c -L. -lmylib
>
>-lstdc++

Заработало. Спасибо!

Только еще надо было добавить
extern "C" { _здесь_ф-ии_которые_будут_вызываться_из_С_кода_ }


В итоге пример пользования таков:


//----- исходник библиотеки -----
//file:  mylib.cpp

#include <stdio.h>
class MyClass
{
public:
    MyClass()  { printf("Constructor MyClass.\n"); }
    ~MyClass() { printf("Destructor  MyClass.\n"); }
};

extern "C"
{
void lib_print(int i)
{
    MyClass a;
    printf("Hello, boss. Incomming parameter id %d.\n", i);
}
}

//----- исходник пользователя библиотекой -----
//file:  libuser.c

void lib_print(int i);
int main()
{
    lib_print(20);
    return 0;
}

//----- сборка либы -----
g++ -Wall lib.cpp -c
ar rc libmylib.a lib.o
ranlib libmylib.a

//----- сборка пользователя -----
gcc -Wall -o libuser_c libuser.c -L. -lmylib -lstdc++

Вывод на консоль:
./libuser_c
Constructor MyClass.
Hello, boss. Incomming parameter id 20.
Destructor  MyClass.

Пэ.Эс. У меня gcc не знал где искать libstdC++.a и пришлось добывить в сборку пользователя путь к ней  -L/usr/lib/gcc/i386-redhat-linux/4.3.0/

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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