[*nix]Как собрать C-код C++-компилятором или как скомпилиться на AIX ?
GLPROW** newFlow=(GLPROW**)malloc(...);
неее, там еще 20 файлов в проекте итого - около 1000 таких ошибок. надо другой способ
C на G++ты пытаешься компилировать силный код как сиплюсплюсный?
Правильный способ - компилировать код на C gcc, а код на C++ - g++.
Вроде ошибка совсем простая - даже подсказали как исправить если таких ошибок всего 10 , но у меня их 1000
Остаётся править код. В принципе, g++ выдаёт, в какой строчке вставлять typecast в какой тип. Можно даже скрипт написать.
Если не секрет, а почему именно надо на g++?
Добавь флаг -xc
Беглая пробежка по ману и гуглу не подсказала мне ключика, который бы включал тайное знание g++ об обычаях использования функции malloc.Остаётся править код. В принципе, g++ выдаёт, в какой строчке вставлять typecast в какой тип. Можно даже скрипт написать.Если не секрет, а почему именно надо на g++?вопрос верный =)
фишка в том что этот кусок встраивается в большущую прогу, которая ессно написана уже на CPP
Добавь флаг -xcпопробую
апд.
видимо нету эффекта:
g++.exe -c mainnovij.cpp -o mainnovij.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include" -xc
In file included from mainnovij.cpp:8:
src/glpapi01.c: In function `void create_prob(glp_prob*)':
src/glpapi01.c:72: error: invalid conversion from `void*' to `GLPROW**'
src/glpapi01.c:73: error: invalid conversion from `void*' to `GLPCOL**'
src/glpapi01.c:77: error: invalid conversion from `void*' to `int*'
фишка в том что этот кусок встраивается в большущую прогу, которая ессно написана уже на CPPтеперь ты еще скажешь, что G++ линкер не жрет объектные файлы от GCC? От f77 жрет, а от GCC не жрет?
фишка в том что этот кусок встраивается в большущую прогу, которая ессно написана уже на CPPЯ не пойму, ты пишешь всю прогу в одном файле что ли? Компилируй Си-шный код Си-шным компилятором, а Си++ компилируй плюсовым. Потом линкуй это всё вместе.
ибо там с линковкой полная жесть, посему меня попросили просто зафигачить всё в одну прогу =)
апд.
еще была такая строка
glp_tree *tree = lp->tree;
на нее так же ругался
120 D:\Dev-Cpp\src\glpapi01.c invalid conversion from `void*' to `glp_tree*'
заменил на
glp_tree *tree = (glp_tree) lp->tree;
не прокатило =)
главное выкинуть devcpp нахуй. Потому что там с мейк-файлами какая-то жажа. Тебе нужно грамотное составление make-файла, так что ботай autotools. (autoconf, automake, и проч.). Под виндой они работают. Если грамотно составишь аутоконфиги, то будет похуй, чем ты собираешь, будь то mpicc, gcc, icc.
glp_tree *tree = (glp_tree) lp->tree;Да ты гений, блин. Вот:
glp_tree *tree = (glp_tree*) lp->tree;
видимо нету эффекта:Потому что -xc надо писать до имени исходного файла, а не после.
Потому что -xc надо писать до имени исходного файла, а не после.ща попробую. а что етот флаг вобще значит?
Тебе нужно грамотное составление make-файла, так что ботай autotools. (autoconf, automake, и проч.). Под виндой они работают. Если грамотно составишь аутоконфиги, то будет похуй, чем ты собираешь, будь то mpicc, gcc, icc.сколько ето по времени займёт? не больше ли чем пихнуть всё в одну функцию ?) если нет, то заботаю кончено, тока доступа к IBM машине пока что нету , так что тренируюсь в иммеющемся G++
чувак, не страдай фигней. Паралельный громакс компилится, линкуя объектники на С, ассемблере и фортране. А ты думаешь, что у тебя будут проблемы с линковкой си и си++ объектников!
дело в том, что метод, который ты хочешь юзать - это кривой костыль. Он будет шаманически работать только на одной версии г++ или Гцц (ну или какой-нибудь другой какашкоид возникнет).
Я подумал что коли он не разобрался , мне скомпилить там в *.o будет еще сложнее.
Я вот думаю если каждый *.C скомпилить там в *.o и потом прилинковать в CPP получится или нет?
дело в том, что метод, который ты хочешь юзать - это кривой костыль. Он будет шаманически работать только на одной версии г++ или Гцц (ну или какой-нибудь другой какашкоид возникнет).почему? я так понял из проги на Сях, получится прога на C++, которая и в др компайлере прокатит
правда поиск в гугле по "c to cpp" ничего не дал, но раз можно написать скрипт мб его кто то уже писал =)
для включения C в C++ есть стандартная конструкция
extern "C"
{
bla-bla
}
соответственно, если надо целые файлы зафигачить (и header-ы и c-шники то будет так:
my.cpp
extern "C"
{
#include "my_c_header.h"
#include "my_c_body.c"
}
extern "C" { int new = 10; void * p; int * p2 = p; }
Сколько ошибок в этом фрагменте?
хз, ботать надо - на C давно ничего не писал
Чисто на уровне компилятора - две: new (не ботал стандарт на счёт extern "C", но студия ругается) и typecast. Логически - неинициализированная ссылка.
Это я к тому, что extern "C" неспроста называют "linkage specification". Он всего лишь указывает, что имена переменных, функций и типов экспортируются в формате С (то есть без mangling).
Да, да, я согласен, но надо откомпилить именно на G++.А потом ты прибежишь с требованием откомпилировать Фортраном?
Причём надо как воздух!
Правильнее всего тебе дать возможность объяснить откуда такая несусветная неоходимость. И если внятного объяснения не последует снести тред в мусорку.
Это из тех соображений, что на unix-машине, а уж тем более айбиэмовской, должен быть нормальный компилятор языка C?
А потом ты прибежишь с требованием откомпилировать Фортраном?я ж ясно написал - есть машина IBM на которой точно скомпилится прога C++ , запиханная в один файл. Доступа у меня к машине пока что нету, так что я упражняюсь и пытаюсь запихнуть всё в один фАЙЛик. не получится - буду пытаться таам линковать, но времени буит мало и не особо я профи в тамошних настройках...
Правильнее всего тебе дать возможность объяснить откуда такая несусветная неоходимость. И если внятного объяснения не последует снести тред в мусорку.
я ж ясно написал - есть машина IBM на которой точно скомпилится прога C++ , запиханная в один файл.Знаешь, у тебя написано вообще непонятно что. Ты хочешь тоже непонятно что.
Уточни следующие вещи:
1) какая это машина.
2) какая операционка.
3) какие там есть компиляторы.
4) по возможности поставь там cmake, думаю он там поставится.
Он успешно справится с твоим кодом.
Написание скрипта считаю неразумным, так как вылезет еще какая-то фигня и надо будет снова изобретать велосипед.
на хосте AIX v 5.2, есть компилятор MPICC ..
как можно скомпилить либу ?)
## Process this file with automake to produce Makefile.in ##
INCLUDES = -I../include
lib_LTLIBRARIES = libglpk.la
libglpk_la_LDFLAGS = -version-info 18:0:18 \
-export-symbols-regex '^(glp_|_glp_lpx_).*'
libglpk_la_SOURCES = \
glpapi01.c \
glpapi02.c \
glpapi03.c \
glpapi04.c \
glpapi05.c \
glpapi06.c \
glpapi07.c \
glpapi08.c \
glpapi09.c \
glpapi10.c \
glpapi11.c \
glpapi12.c \
glpapi13.c \
glpapi14.c \
glpapi15.c \
glpapi16.c \
glpapi17.c \
glpavl.c \
glpbfd.c \
glpbfx.c \
glpcpx.c \
glpdmp.c \
glpfhv.c \
glpgmp.c \
glphbm.c \
glpini01.c \
glpini02.c \
glpios01.c \
glpios02.c \
glpios03.c \
glpios04.c \
glpios05.c \
glpios06.c \
glpios07.c \
glpios08.c \
glpios09.c \
glpipm.c \
glpipp01.c \
glpipp02.c \
glplib01.c \
glplib02.c \
glplib03.c \
glplib04.c \
glplib05.c \
glplib06.c \
glplib07.c \
glplib08.c \
glplib09.c \
glplib10.c \
glplib11.c \
glplib12.c \
glplpf.c \
glplpp01.c \
glplpp02.c \
glplpx01.c \
glplpx02.c \
glplpx03.c \
glplpx04.c \
glplpx05.c \
glplpx06.c \
glplpx07.c \
glplpx08.c \
glplpx09.c \
glpluf.c \
glplux.c \
glpmat.c \
glpmpl01.c \
glpmpl02.c \
glpmpl03.c \
glpmpl04.c \
glpmpl05.c \
glpmps01.c \
glpmps02.c \
glppds.c \
glpqmd.c \
glprgr.c \
glprng01.c \
glprng02.c \
glpscf.c \
glpscg.c \
glpscl.c \
glpspm.c \
glpspx01.c \
glpspx02.c \
glpsql.c \
glpssx01.c \
glpssx02.c \
glptsp.c
## eof ##
./configure
make
вроде бы, ну и переменные типа CC должны стоять наверное
все верно, только надо убедится что все нужные переменные окружения выставлены.
Сообщение удалил
Сообщение удалил
кстати библиотека вот http://www.nic.funet.fi/pub/gnu/gnu/glpk/glpk-4.33.tar.gz
g++ -o mainnovij 1.cpp -lglpk -L. -maix64
collect2: ./libglpk.a: not a COFF file
В общем если кто сможет скомпилить библу под AIX то вот она,о чем хоть библиотека?
пеши в приват, договоримся, машину с AIX если дашь — хорошо, нет — найду.
вроде сбилдил уже, пришлось пересобирать libtool/m4/autoconfig/automake и конфиги немного править. тупая ОС-таки, либо просто версия старая стоит...
да, спасибо Earl, перепоставил системные утилиты для сборки библиотеки..
libtool/m4/autoconfig/automake\
выкинь нафиг, используй cmake
К нему уже написали нормальную документацию?
хотя в плане поддержки мастдая и макоси он явно лидер.
Оставить комментарий
356ft85
DEV-С++ выдал тучу ошибок вот такого рода:Это я так понимаю из за попытки компилировать C на G++.
Как всё же скомпилить эту прогу компилятором G++?