| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 отлично ладят. может библиотеку подключить какую-нить. только какую.... |
| Автор: 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++ (путь до него тоже надо указывать) линкуется на ура. только вот теперь надо разбираться с исключениями в линуксе умя абортит когда исключение генерю. спасиб за урл. |