The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Возмжно ли использовать библиотеку на С++ в проекте на С?, !*! worman, 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

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

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

    -lstdc++

    • Возмжно ли использовать библиотеку на С++ в проекте на С?, !*! worman, 11:16 , 20-Май-09 (2)
      >>//----- сборка пользователя -----
      >>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/




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

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