Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 23 окт 2019, 06:50




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 28 апр 2006, 12:54 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 15.02.2004
Сообщения: 287
Откуда: Belarus, Minsk
Есть ли возможность разные части прграммы писать на с и с++?
Мои попытки не чем хорошим не закончились.
Исходники:

main.c
Код:
#include "say.h"

int main()
{
        say();
        return 0;
}



say.cpp
Код:
#include <iostream>
using namespace std;

int say()
{
        cout << "Hello\n";
        return 0;
}



say.h
Код:
int say();


Компилирование и линковка:
Код:
[silos@asakura 1]$ gcc -c main.c -o main.o
[silos@asakura 1]$ g++ -c say.cpp -o say.o
[silos@asakura 1]$ gcc -o say say.o main.o
say.o: In function `__static_initialization_and_destruction_0(int, int)':say.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
say.o: In function `__tcf_0':say.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
say.o: In function `say()':say.cpp:(.text+0x83): undefined reference to `std::cout'
:say.cpp:(.text+0x88): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
say.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
main.o: In function `main':main.c:(.text+0x12): undefined reference to `say'
collect2: ld returned 1 exit status
[silos@asakura 1]$ g++ -o say say.o main.o
main.o: In function `main':main.c:(.text+0x12): undefined reference to `say'
collect2: ld returned 1 exit status
[silos@asakura 1]$


Собрать объектные файлы неудалось, ни gcc, ни g++.
Я так думаю, что компилятору необходимо указать каким образом линковать, что бы не было undefined reference, но как?


Вернуться к началу
 Не в сети Профиль Личный альбом  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 28 апр 2006, 14:07 
Неотъемлемая часть форума

У нас с: 03.04.2004
Сообщения: 436
g++ say.cpp main.c -o main не собирает приложение? не верю...
а вообще надо просто линковать полученные обжекты с -lstdc++ насколько я помню (в случае использования ld или gcc на фазе линковки).


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 28 апр 2006, 14:09 
Интересующийся

У нас с: 21.04.2006
Сообщения: 40
Откуда: Мінск
say.h
Код:
#ifdef __cplusplus
extern "C" {
#endif

int say();

#ifdef __cplusplus
}
#endif



Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 28 апр 2006, 15:14 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 15.02.2004
Сообщения: 287
Откуда: Belarus, Minsk
Подправил до следующего вида - заработало, спасибо. Makefile все собираю.
А где можно по этой теме, желательно на русском, почитать, чтоб разобраться как следут?

say.h
Код:
#ifdef __cplusplus
extern "C" {
#endif

int say();

#ifdef __cplusplus
}
#endif


say.cpp
Код:
#include <iostream>
#include "say.h"
using namespace std;

int say()
{
        cout << "Hello\n";
        return 0;
}



Makefile
Код:
say: main.o say.o
        g++ -o say say.o main.o

main.o: main.c say.h
        gcc -c main.c

say.o: say.cpp say.h
        g++ -c say.cpp


Вернуться к началу
 Не в сети Профиль Личный альбом  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100