Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция программы для gcc в g++ 
:(
    Опции темы
kensei
Дата 21.12.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Доброго времени суток. 
Имеется программа-калькулятор "dc". Компилятором gcc компилируется без проблем. Нужно откомпилировать ее в g++ и тут начинаются проблемы. Во-первых, несовместимость типов (здесь я сделал приведение типов); во-вторых, 
линкер выдает несколько ошибок вида:
Код

numeric.o(.text+0xe): In function `dc_add(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'


Make-файл:
Код

C=gcc
CPP=g++
DEBUG=-g2
CFLAGS=-Wall
TARGET=dc
OBJECTS=numeric.o string.o
OTHER=dc.o array.o eval.o misc.o stack.o
ALL= $(OTHER) $(OBJECTS)
ALLC= numeric.c string.c dc.c array.c eval.c misc.c stack.c

gpp: $(ALLC)
        $(CPP) -c $(CFLAGS) numeric.c
        $(CPP) -c $(CFLAGS) string.c
        $(CPP) -c $(CFLAGS) dc.c
        $(CPP) -c $(CFLAGS) array.c
        $(CPP) -c $(CFLAGS) eval.c
        $(CPP) -c $(CFLAGS) misc.c
        $(CPP) -c $(CFLAGS) stack.c
$(TARGET).g++: gpp
        $(CPP) -o $@ $(CFLAGS) $(ALL) -O2 -L. -lbc

clear:
        rm -f *.o  $(TARGET).g++



Подскажите как с этим бороться.
З.Ы. Можно где-нибудь скачать готовые исхоники этой проги под Си++? 


Это сообщение отредактировал(а) kensei - 21.12.2008, 23:34
PM MAIL   Вверх
MAKCim
Дата 22.12.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



kensei
extern "C"
если я правильно понял

приведи кусок кода, на что ругается


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kensei
Дата 22.12.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



MAKCim,
Например здесь
Код

int
dc_add DC_DECLARG((a, b, kscale, result))
        dc_num a DC_DECLSEP
        dc_num b DC_DECLSEP
        int kscale ATTRIB((unused)) DC_DECLSEP
        dc_num *result DC_DECLEND
{
        bc_init_num((bc_num *)result);
        bc_add(CastNum(a), CastNum(b), (bc_num *)result, 0);
        return DC_SUCCESS;
}
 


Все функции не показываю, потому что их там вагон и маленькая тележка.

Ошибки:
Код

numeric.o(.text+0xe): In function `dc_add(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x24):numeric.c: undefined reference to `bc_add(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x40): In function `dc_sub(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x56):numeric.c: undefined reference to `bc_sub(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x72): In function `dc_mul(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x89):numeric.c: undefined reference to `bc_multiply(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0xa6): In function `dc_div(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0xbd):numeric.c: undefined reference to `bc_divide(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x10f): In function `dc_divrem(dc_number*, dc_number*, int, dc_number**, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x11e):numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x13c):numeric.c: undefined reference to `bc_divmod(bc_struct*, bc_struct*, bc_struct**, bc_struct**, int)'
numeric.o(.text+0x190): In function `dc_rem(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x1a7):numeric.c: undefined reference to `bc_modulo(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x1f9): In function `dc_modexp(dc_number*, dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x217):numeric.c: undefined reference to `bc_raisemod(bc_struct*, bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x22f):numeric.c: undefined reference to `bc_is_zero(bc_struct*)'
numeric.o(.text+0x282): In function `dc_exp(dc_number*, dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x299):numeric.c: undefined reference to `bc_raise(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x2b6): In function `dc_sqrt(dc_number*, int, dc_number**)':
numeric.c: undefined reference to `bc_copy_num(bc_struct*)'
numeric.o(.text+0x2cb):numeric.c: undefined reference to `bc_sqrt(bc_struct**, int)'
numeric.o(.text+0x300):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x336): In function `dc_compare(dc_number*, dc_number*)':
numeric.c: undefined reference to `bc_compare(bc_struct*, bc_struct*)'
numeric.o(.text+0x34e): In function `dc_free_num(dc_number**)':
numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x366): In function `dc_num2int(dc_number*, dc_discard)':
numeric.c: undefined reference to `bc_num2long(bc_struct*)'
numeric.o(.text+0x39c): In function `dc_int2data(int)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x3ae):numeric.c: undefined reference to `bc_int2num(bc_struct**, int)'
numeric.o(.text+0x3d9): In function `dc_getnum(int (*)(), int, int*)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x3e8):numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x3f7):numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x408):numeric.c: undefined reference to `bc_copy_num(bc_struct*)'
numeric.o(.text+0x41d):numeric.c: undefined reference to `bc_int2num(bc_struct**, int)'
numeric.o(.text+0x4d9):numeric.c: undefined reference to `bc_int2num(bc_struct**, int)'
numeric.o(.text+0x4ef):numeric.c: undefined reference to `bc_multiply(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x505):numeric.c: undefined reference to `bc_add(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x516):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x525):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x536):numeric.c: undefined reference to `bc_copy_num(bc_struct*)'
numeric.o(.text+0x54a):numeric.c: undefined reference to `bc_copy_num(bc_struct*)'
numeric.o(.text+0x5a0):numeric.c: undefined reference to `bc_divide(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x5b6):numeric.c: undefined reference to `bc_add(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x5ca):numeric.c: undefined reference to `bc_int2num(bc_struct**, int)'
numeric.o(.text+0x5e0):numeric.c: undefined reference to `bc_multiply(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x5f6):numeric.c: undefined reference to `bc_add(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x60c):numeric.c: undefined reference to `bc_multiply(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x635):numeric.c: undefined reference to `bc_sub(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x644):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x653):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x662):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x6f3): In function `dc_math_init()':
numeric.c: undefined reference to `bc_init_numbers()'
numeric.o(.text+0x77e): In function `dc_out_num(dc_number*, int, dc_newline, dc_discard)':
numeric.c: undefined reference to `bc_out_num(bc_struct*, int, void (*)(int), int)'
numeric.o(.text+0x7c5): In function `dc_dump_num(dc_number*, dc_discard)':
numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x7d4):numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x7e3):numeric.c: undefined reference to `bc_init_num(bc_struct**)'
numeric.o(.text+0x7fe):numeric.c: undefined reference to `bc_divide(bc_struct*, bc_struct*, bc_struct**, int)'
numeric.o(.text+0x830):numeric.c: undefined reference to `bc_int2num(bc_struct**, int)'
numeric.o(.text+0x84d):numeric.c: undefined reference to `bc_divmod(bc_struct*, bc_struct*, bc_struct**, bc_struct**, int)'
numeric.o(.text+0x86c):numeric.c: undefined reference to `bc_num2long(bc_struct*)'
numeric.o(.text+0x891):numeric.c: undefined reference to `bc_is_zero(bc_struct*)'
numeric.o(.text+0x8e5):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x8f4):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
numeric.o(.text+0x903):numeric.c: undefined reference to `bc_free_num(bc_struct**)'
./libbc.a(number.o)(.text+0x65): In function `bc_new_num':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:74: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0x97):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:67: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0xa10): In function `new_sub_num':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:645: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0x16d5): In function `bc_divide':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1014: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0x16df):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:983: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0x16e9):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:977: more undefined references to `out_of_memory' follow
./libbc.a(number.o)(.text+0x191b): In function `bc_raisemod':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1207: undefined reference to `rt_warn'
./libbc.a(number.o)(.text+0x1930):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1201: undefined reference to `rt_warn'
./libbc.a(number.o)(.text+0x1959):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1196: undefined reference to `rt_warn'
./libbc.a(number.o)(.text+0x19eb): In function `bc_raise':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1253: undefined reference to `rt_error'
./libbc.a(number.o)(.text+0x1b41):/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1250: undefined reference to `rt_warn'
./libbc.a(number.o)(.text+0x21ff): In function `bc_out_num':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1526: undefined reference to `out_of_memory'
./libbc.a(number.o)(.text+0x23bb): In function `num2str':
/home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/number.c:1669: undefined reference to `out_of_memory'
collect2: ld returned 1 exit status
make: *** [dc.g++] Ошибка 1


Путь /home/dmitry/STUD/Metodichka/SAMPLES/bc-1.06/lib/ на серве есть.
PM MAIL   Вверх
Torsten
Дата 22.12.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: нет
Всего: 7



у меня есть схожая проблема.
Есть библиотека на Си, собрана gcc.
Я хочу сделать оболочку на С++, но проблема в том что на этапе линковки, функции которые есть в библиотеке пишется как undefined symbol. Описал все функции в секции extern "C", которые я использую - в итоге ругается на 2 (у меня их 4 в тесте) функции :
Цитата
тут имя функции with C++ linkage
../Source/main.cpp:10: error: conflicts with new declaration with C linkage


Непонятно чего делать.


Это сообщение отредактировал(а) Torsten - 22.12.2008, 12:54
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
kensei
Дата 27.12.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



MAKCim
Спасибо. Extern "C" помог.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0721 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.