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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование библиотеки на D в коде C++, undefined reference to 
:(
    Опции темы
AlterMann
Дата 12.7.2013, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, о многоуважаемые!  smile 

Довелось мне познакомиться не так давно с интересным таким языком D.
Но естественно сам по себе D как-то не очень доставляет, поскольку много кода уже написано на C++ и хотелось бы поэтому научиться дружить их вместе.
Раньше я этого, к сожалению не делал, с другими языками. Только на С++ писал библиотеку и использовал в другом С++ коде.

Итак, естественно почитав интернетов, написал следующее на D:
Код

extern(C++) {
    interface AutomataInterface {
        void next();
        void save();

        // ...
    }

    AutomataInterface createAutomata(size_t x, size_t y) {
        return new CompleteAutomata(x, y);
    }
}

class CompleteAutomata : AutomataInterface {
    // ...

    extern(C++) {
        override void next() {
            // ...
        }

        override void save() {
            // ...
        }

        // ...
    }
}


Данный код компилирую так: dmd -release -O -lib -odlib -oflibautomata.a *.d

Затем пытаюсь подключить полученную библиотеку к Qt проекту, предварительно написав на C++:
Код

class AutomataInterface {
public:
    virtual ~AutomataInterface() {}

    virtual void next() = 0;
    virtual void save() = 0;

    // ...
};

AutomataInterface *createAutomata(unsigned long x, unsigned long y);

// и где надо (собственно на эту строчку и ругается, когда проект компилируется)
AutomataInterface *automata = createAutomata(10, 10);


В Qt проект добавил библиотеку собранную на D. При сборке проекта получаю ошибку:
Код

undefined reference to `createAutomata(unsigned long, unsigned long)'
collect2: error: ld returned 1 exit status


Что-то ошибка совсем уж такая знакомая знакомая, но понять не могу, что не так.
Подскажите пожалуйста.
PM MAIL WWW   Вверх
feodorv
Дата 12.7.2013, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



А собственно тело функции createAutomata в библиотеке присутствует?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Guinness
Дата 12.7.2013, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



feodorv, там вроде реализованно:
Код

AutomataInterface createAutomata(size_t x, size_t y) {
        return new CompleteAutomata(x, y);
}

А может быть косяк в том, что произошло вот это объявление в С++ коде:
Код

AutomataInterface *createAutomata(unsigned long x, unsigned long y);

И данная функция перекрывает библиотечную?
PM MAIL   Вверх
bsa
Дата 12.7.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Guinness, если у них сигнатуры совпадают, то перекрытия быть не должно. Вопрос только в том, а как у D вообще с экспортом? Потому что даже экспорты разных компиляторов С++ несовместимы.
PM   Вверх
volatile
Дата 12.7.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Cкорей всего несоответствие компиляторов.
В С++ есть такая весч как замангливание (mangled) имен функций.
Так вот, соответствия в этом замангливании, нет даже в родном С++ коде от разных компиляторов.
Что уж говорить об компиляторе D.

Добавлено через 47 секунд
упс. пост bsa, не видел
PM MAIL   Вверх
feodorv
Дата 12.7.2013, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Guinness @  12.7.2013,  15:42 Найти цитируемый пост)
feodorv, там вроде реализованно

Вроде да, а с каким именем попало в библиотеку - неизвестно))) 

Цитата(volatile @  12.7.2013,  15:56 Найти цитируемый пост)
В С++ есть такая весч как замангливание (mangled) имен функций.

Вот)))

Надо залезть внутрь библиотеки, поискать строчку createAutomata, и понять, что компилятор сотворил с именем. Быть может, там только лишний префикс по сравнению с именем, генерируемом в C++. 

Это сообщение отредактировал(а) feodorv - 12.7.2013, 15:58


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AlterMann
Дата 12.7.2013, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa, по идее, когда мы в D объявляем фукнцию как export(C++), компилятор кладёт в библиотеку функцию соответствующую правилам именования в С++. С другой стороны, куда уж там, если у каждого компилятора свои приколы могут быть в этом направлении. :(

feodorv, посмотрел библиотеку и нашёл там пару вбросов такого содержания:
Код

^@_Z14createAutomatayy^@

Правда мне это ни о чём не говорит.

Попробовал скомпилировать D код с помощью GDC (на основе GCC 4.8.1). Опции компиляции и сборка библиотеки:
Код

gdc -frelease -O2 -Wall -c *.d
ar cq lib/libautomata.a *.o


Библиотека собралась ок. При попытке собрать C++ проект - та же проблема.
Посмотрел внутрь полученной библиотеки и обнаружил такое же вхождение упоминания о не линкуемой функции:
Код

^@_Z14createAutomatayy^@


Пробовал менять сигнатуру функции в D коде с
Код

createAutomata(size_t x, size_t y)
// на
createAutomata(ulong x, ulong y)

безрезультатно.

Это сообщение отредактировал(а) AlterMann - 13.7.2013, 00:28
PM MAIL WWW   Вверх
bsa
Дата 14.7.2013, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



AlterMann, сделай тоже самое на С++ и посмотри, как будет в нем называться.
PM   Вверх
AlterMann
Дата 15.7.2013, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема сдвинулась с мёртвой точки.

Внимательно посмотрев сигнатуру функции в скомпиленной библиотеке, я обнаружил не соответствие типов, и size_t  или ulong преобразовывалось в unsigned long long, что явно не то же самое, что unsigned long. Чтобы раз и на всегда избавиться от этого, определил и в С++ и в D метод createAutomata(unsigned int, unsigned int), и вуаля, линковка этой функции таки прошла успешно. Но появились новые неожиданности.

Теперь, в случае сборки библиотеки с помощью dmd (или gdc) и дальнейшей попытки заюзать библиотеку в C++ коде я получаю следующую ошибку:

Код

g++ -Wl,-O1 -Wl,-z,relro -o cellular_life main.o mainwindow.o renderarea.o button.o playbutton.o moc_mainwindow.o moc_renderarea.o moc_button.o moc_playbutton.o    -L/home/newmen/gcc/lib64 -L/home/newmen/projects/d/life/lib -llife -lQtGui -lQtCore -lpthread 
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1fe_5b0.o): In function `createAutomata(unsigned int, unsigned int)':
complete_automata.d:(.text._Z14createAutomatajj+0x27): undefined reference to `_d_newclass'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.data+0x0): undefined reference to `_D14TypeInfo_Class6__vtblZ'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.data+0x50): undefined reference to `_D6Object7__ClassZ'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.data+0xd0): undefined reference to `_D14TypeInfo_Class6__vtblZ'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.data+0x120): undefined reference to `_D6Object7__ClassZ'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x68): undefined reference to `_D6object6Object8toStringMFZAya'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x70): undefined reference to `_D6object6Object6toHashMFNbNeZm'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x78): undefined reference to `_D6object6Object5opCmpMFC6ObjectZi'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x80): undefined reference to `_D6object6Object8opEqualsMFC6ObjectZb'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0xf8): undefined reference to `_D6object6Object8toStringMFZAya'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x100): undefined reference to `_D6object6Object6toHashMFNbNeZm'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x108): undefined reference to `_D6object6Object5opCmpMFC6ObjectZi'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o):(.rodata+0x110): undefined reference to `_D6object6Object8opEqualsMFC6ObjectZb'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o): In function `_D17complete_automata16CompleteAutomata6__ctorMFmmZC17complete_automata16CompleteAutomata':
complete_automata.d:(.text._D17complete_automata16CompleteAutomata6__ctorMFmmZC17complete_automata16CompleteAutomata+0x1f): undefined reference to `_d_newclass'
complete_automata.d:(.text._D17complete_automata16CompleteAutomata6__ctorMFmmZC17complete_automata16CompleteAutomata+0x46): undefined reference to `_d_newclass'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o): In function `CompleteAutomata::next()':
complete_automata.d:(.text._ZN16CompleteAutomata4nextEv+0x2f): undefined reference to `_d_newclass'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o): In function `CompleteAutomata::save()':
complete_automata.d:(.text._ZN16CompleteAutomata4saveEv+0x25): undefined reference to `_adDupT'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o): In function `CompleteAutomata::restore()':
complete_automata.d:(.text._ZN16CompleteAutomata7restoreEv+0x33): undefined reference to `_d_newclass'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1ff_675.o): In function `CompleteAutomata::zerofile()':
complete_automata.d:(.text._ZN16CompleteAutomata8zerofileEv+0x2f): undefined reference to `_d_newclass'
/home/newmen/projects/d/life/lib/liblife.a(object_201_8b7.o): In function `no symbol':
/usr/include/dmd/druntime/import/object.di:(.text+0x6): undefined reference to `_Dmodule_ref'
/home/newmen/projects/d/life/lib/liblife.a(object_201_8b7.o):(.data._D12TypeInfo_Axi6__initZ+0x0): undefined reference to `_D14TypeInfo_Array6__vtblZ'
...


Попробовал поставить перед классом CompleteAutomata квалификатор package, но это не дало результата.

Это сообщение отредактировал(а) AlterMann - 15.7.2013, 11:14
PM MAIL WWW   Вверх
feodorv
Дата 15.7.2013, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



На вид нужна какая-то D-библиотека...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AlterMann
Дата 16.7.2013, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добавил, при сборке С++ проекта, флаг на включение стандартной библиотеки D phobos, причём для разных случаев компиляторов (dmd или gdc) свою соответствующую версию.

Теперь, судя по всему, в случае dmd, недостаёт библиотеки libcurl-gnutils:
Код

g++ -Wl,-O1 -Wl,-z,relro -o cellular_life main.o mainwindow.o renderarea.o button.o playbutton.o moc_mainwindow.o moc_renderarea.o moc_button.o moc_playbutton.o -L/home/newmen/projects/d/life/lib -llife -lQtGui -lQtCore -lpthread -lphobos2
/usr/bin/ld: warning: libcurl-gnutls.so.4, needed by /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_duphandle@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_strerror@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_slist_free_all@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_global_init@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_perform@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_init@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_pause@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `_Dmain'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_setopt@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_slist_append@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_global_cleanup@CURL_GNUTLS_3'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libphobos2.so: undefined reference to `curl_easy_cleanup@CURL_GNUTLS_3'
collect2: error: ld returned 1 exit status
make: *** [cellular_life] Error 1

которую посмотрев интернет попробовал симулировать: ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4
Но успехом это назвать нельзя, поскольку сообщение о недостатке libcurl-gnutls.so.4 пропадает, но остальные строки об undefined reference to остаются. Может надо откуда-то взять именно эту необыкновенную libcurl-gnutls?

В случае gdc как-то по разному всякий раз происходит (что-то меняю, и уже не отдаю себе отчёта в том, что конкретно). Но достаточно часто проявляется ошибка multiple definition of, а также в конце о недостатке librt:
Код

/home/newmen/gcc/bin/g++ -Wl,-O1 -Wl,-z,relro -o cellular_life main.o mainwindow.o renderarea.o button.o playbutton.o moc_mainwindow.o moc_renderarea.o moc_button.o moc_playbutton.o    -L/home/newmen/gcc/lib64 -L/home/newmen/projects/d/life/lib -llife -lQtGui -lQtCore -lpthread -lgphobos2
/home/newmen/projects/d/life/lib/liblife.a(complete_automata.o): In function `_D17complete_automata16CompleteAutomata7restoreMRZv14SliceAgregator9initValueMxFmmZi':
complete_automata.d:(.text+0x0): multiple definition of `_D17complete_automata16CompleteAutomata7restoreMRZv14SliceAgregator9initValueMxFmmZi'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1e3_675.o):complete_automata.d:(.text._D17complete_automata16CompleteAutomata7restoreMRZv14SliceAgregator9initValueMxFmmZi+0x0): first defined here
/home/newmen/projects/d/life/lib/liblife.a(complete_automata.o): In function `CompleteAutomata::invert(unsigned long long, unsigned long long)':
complete_automata.d:(.text+0x40): multiple definition of `CompleteAutomata::invert(unsigned long long, unsigned long long)'
/home/newmen/projects/d/life/lib/liblife.a(complete_automata_1e3_675.o):complete_automata.d:(.text._ZN16CompleteAutomata6invertEyy+0x0): first defined here
...
/home/newmen/projects/distrib/gcc-4.8.1/x86_64-unknown-linux-gnu/libphobos/libdruntime/../../.././libphobos/libdruntime/rt/dmain2.d:394: multiple definition of `main'
main.o:/home/newmen/projects/d/life/qt_viewer/main.cpp:5: first defined here
/usr/bin/ld: /home/newmen/gcc/lib64/libgphobos2.a(time.o): undefined reference to symbol 'clock_getres@@GLIBC_2.2.5'
/usr/bin/ld: note: 'clock_getres@@GLIBC_2.2.5' is defined in DSO /lib64/librt.so.1 so try adding it to the linker command line
/lib64/librt.so.1: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [cellular_life] Error 1

хотя  в /usr/lib64 оно присутствует.

Подскажите пожалуйста, куда дальше копать? smile
В интернетах нашёл на эту тему лишь только пару гневных постов людей, которые восхищаются D, но продолжают писать на С++, и ругают создателя D (Уолтера Брайта) за то что якобы очень очень часто возникают подобные проблемы линковки.
PM MAIL WWW   Вверх
feodorv
Дата 16.7.2013, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(AlterMann @  16.7.2013,  08:39 Найти цитируемый пост)
попробовал симулировать

Может, линковщик линк не воспринимает? Вообще-то, должен...
Пакет libcurl3-gnutls не пробовали?

Цитата(AlterMann @  16.7.2013,  08:39 Найти цитируемый пост)
undefined reference to `_Dmain'

Это как???


Цитата(AlterMann @  16.7.2013,  08:39 Найти цитируемый пост)
CompleteAutomata::invert(unsigned long long, unsigned long long)

Вроде же Вы на unsigned int перешли?


Цитата(AlterMann @  16.7.2013,  08:39 Найти цитируемый пост)
за то что якобы

Отчётливо видно, что не "якобы"((( Нет никакой чёткой инструкции, одни позитивные утверждения...


Вообще, не поймёшь, чего происходит. А Вы не пробовали скачать исходники D и откомпилировать всё это на своём узле?

Это сообщение отредактировал(а) feodorv - 16.7.2013, 09:06


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AlterMann
Дата 16.7.2013, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(feodorv @  16.7.2013,  08:51 Найти цитируемый пост)
Пакет libcurl3-gnutls не пробовали?

Для федоры не удалось сие найти, поэтому пришлось "симулировать".

Цитата(feodorv @  16.7.2013,  08:51 Найти цитируемый пост)
Это как???

Фик знает. Мистика.  smile 
Так обычно ругается, когда компилишь код на D, который не имеет main() функции. Но для библиотеки то куда эту main-функцию написать? И почему перед этой ошибкой и после неё проявляются сторонние страсти?

Цитата(feodorv @  16.7.2013,  08:51 Найти цитируемый пост)
Вроде же Вы на unsigned int перешли?

Перешёл только для функции createAutomata, поскольку именно её использую в С++ проекте. Всё остальное остаётся в D библиотеке.

Цитата(feodorv @  16.7.2013,  08:51 Найти цитируемый пост)
Вообще, не поймёшь, чего происходит. А Вы не пробовали скачать исходники D и откомпилировать всё это на своём узле?

dmd из исходников собирать не пробовал, вместо этого скачивал RPM ну а дальше дело техники. Думаете стоит попробовать собрать?
gdc нету прекомпиленных (не нашёл), поэтому собрал самостоятельно его.

Это сообщение отредактировал(а) AlterMann - 16.7.2013, 09:20
PM MAIL WWW   Вверх
feodorv
Дата 16.7.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(AlterMann @  16.7.2013,  10:17 Найти цитируемый пост)
И почему перед этой ошибкой и после неё проявляются сторонние страсти?

Точно мистика)))

Цитата(AlterMann @  16.7.2013,  10:17 Найти цитируемый пост)
Думаете стоит попробовать собрать?

Думаю, да, если есть время и желание. По крайней мере, странные зависимости от неуловимой libcurl-gnutls.so.4 должны пропасть...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AlterMann
  Дата 19.7.2013, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Долго ли коротко ли, но до меня добрался тот самый мануал, в котором было написано как линковать D код с C++ кодом. Оказывается, в качестве линковщика нужно использовать тот же dmd, и в таком случае всё ок линукется и на выходе мы получаем вполне себе бинарничек. Правда в случае с Qt нужно подобавлять флагов линковки
Код

dmd obj/*.o qt_viewer/*.o -L-lQtGui -lQtCore -L-lstdc++ -oflife

чтобы были учтены Qt-шные либы. И радость моя была бы безграничной, если бы ещё полученный бинарничек таки заработал бы. Но вместо этого в момент запуска сразу же происходит Segmentation fault (core dumped). По сему печальному поводу gdb выдаёт не достаточно информативный бактрейс:
Код

Program received signal SIGSEGV, Segmentation fault.
0x000000000043b57e in gc_malloc ()
(gdb) backtrace 
#0  0x000000000043b57e in gc_malloc ()
#1  0x000000000043c76c in _d_newclass ()
#2  0x0000000000438f19 in createAutomata(unsigned int, unsigned int) ()
#3  0x000000000042f3b5 in RenderArea::RenderArea (this=0x8c0300, parent=0x7fffffffdd00) at renderarea.cpp:8
#4  0x000000000042eb66 in MainWindow::MainWindow (this=0x7fffffffdd00) at mainwindow.cpp:5
#5  0x000000000042ea55 in main (argc=1, argv=0x7fffffffde58) at main.cpp:7

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

Стало быть как-то неправильно мои два кусочка работают друг с дружкою. И нельзя передавать чистый созданный D-объект в C++ код. Видимо нужно передачу такую осущесвлять в D коде, вызывая C++ функцию и передавая ей созданный объект. Но в таком случае это очень плохо, и подобные навороты мне противны.

В случае с gdc линковка не удаётся - ругается на какие-то вызовы похожие на работу с тредами...
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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