Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > не линкуется


Автор: YonasBriginas 3.4.2006, 22:25
скомпилировал сишную функцию, а потом объектный файл прилинковал к фортрановскому. (из фортрана вызвал сишную функцию). так у меня компилятор ругается на то, что тип string ему неизвестен. не подскажете, какой выход из этой ситуации?
icc -c test.cpp
ifort test1.f90 test.o

и выдаёт типа:
неизвестныое объявление std::string::string(...) и тому подобное.

зы
извиняюсь, что пример не могу привести, т.к. нет под рукой линукса.


Автор: bilbobagginz 4.4.2006, 10:08
тип string в оригинальном Си не существует.
ты используешь вроде интелевский компилятор, а файл у тебя видимо не Си а Си++.
короче, используй флаг компотобильности с ANSI. и убери string, cout, cin, и т.д. - сделай функцию на Си.

пока.

Автор: YonasBriginas 4.4.2006, 15:51
не корректно выразился. да, с++ ф-ция. если бы у меня была только одна ф-ция, то конечно переделал бы. но объём кода большой и убирать равносильно переписыванию всего...
на счёт флага совместимости можно подробнее? и есть варианты, чтобы не переписывать код на си++?

в win32 компиляторы df и cl отлично ладят.

может библиотеку подключить какую-нить. только какую.... smile

Автор: bilbobagginz 5.4.2006, 03:30
дело твое в принципе возможное но муторное. Если с аглиццким нет проблем, почитай о разницах:
http://www.math.utah.edu/software/c-with-fortran.html#common-types
между Фортраном и Си++ есть 3 базовых типа:
int <=> INTEGER
float <=> REAL
double <=> DOUBLE PRECISION



и следовательно все связи между модулями должны происходить именно этими типами.
в Си++ добавляется проблема строения класса ( не кострукции, а из чего создают ), и там vptr всю малину портит.


короче, то что ты делаешь называется просто: гемор.

как именно связывать фортран с либами Си++ - ртфм мануал компилятора.

Автор: YonasBriginas 5.4.2006, 16:18
связи между языками настроил достаточно просто.
нашёл в мануалах! там просто надо было подключить libstdc++ (путь до него тоже надо указывать)
линкуется на ура.
только вот теперь надо разбираться с исключениями в линуксе smile
умя абортит когда исключение генерю. smile

спасиб за урл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)