Linux.by
https://forum.linux.by/

Использование c в проектах на c++ и наоборот
https://forum.linux.by/viewtopic.php?f=6&t=7549
Страница 1 из 1

Автор:  Silos [ 28 апр 2006, 12:54 ]
Заголовок сообщения:  Использование c в проектах на c++ и наоборот

Есть ли возможность разные части прграммы писать на с и с++?
Мои попытки не чем хорошим не закончились.
Исходники:

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, но как?

Автор:  Foxx [ 28 апр 2006, 14:07 ]
Заголовок сообщения: 

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

Автор:  Yurand [ 28 апр 2006, 14:09 ]
Заголовок сообщения: 

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

int say();

#ifdef __cplusplus
}
#endif


Автор:  Silos [ 28 апр 2006, 15:14 ]
Заголовок сообщения: 

Подправил до следующего вида - заработало, спасибо. 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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/