![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
e.ustimenko |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Всем привет. Меня зовут Евгений.
У меня возникла потребность в boost, а точнее в BGL в связи с моим дипломом. Проблема моя состоит в следующем: не могу собрать до конца приложение. То есть, на этапе компиляции все проходит замечательно, а на этапе линковки начинает гнать какую-то фигню про то, что очень нуждается в дополнительных библиотеках. Вот текст ошибки: icpc -o"ShortGraphWay" ./src/searchShortWay/SearchShortWay.o ./src/main.o ./src/interface/Interface.o ./src/searchShortWay/SearchShortWay.o: In function `SearchShortWay::openGraphvizFile(std::string)': ../src/searchShortWay/SearchShortWay.cpp:(.text+0x38cf): undefined reference to `boost::detail::graph::read_graphviz(std::string const&, boost::detail::graph::mutate_graph*)' Собираю компилятором Intel. Погуглил основательно часа три - четыре, нашел следующие вещи: 1. Надо при сборке BGL использовать libbgl-viz. http://www.cs.brown.edu/~jwicks/boost/libs...d-graphviz.html Собрал, как написано, проставил в опциях Eclipse. Он ее не видит icpc -L/home/evgeny/searchshortway/lib -o"ShortGraphWay" ./src/searchShortWay/SearchShortWay.o ./src/main.o ./src/interface/Interface.o -llibbgl-viz ld: cannot find -llibbgl-viz 2. Надо собирать не стандартными компиляторами, а специальным bjam Тут вообще веселье началось. Поставить, поставил, а вот настроить не могу. Лезу в файлик /usr/share/boost-build/user-config.jam Пытаюсь раскомментировать строчку с использованием gcc, он мне в ответ на команду bjam <требуемый файл> говорит, что у меня продублирован gcc. Intel я не рискнул использовать, так как не могу найти, в каком из файлом прописывается путь к компилятору. Вот такая вот запара, манов по этому делу найти вообще не могу ни на английском, ни на русском языках. Если сталктвались с такой проблемой, буду очень признателен за помощь. |
|
|
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
что-то у тебя каша в голове:
bjam - это НЕ КОМПИЛЯТОР. это аналог autotools, если угодно - т.е. система для автоматической сборки проектов. bjam юзает конкретный компилятор, который ты ему укажешь. указывается он через bootstrap или непосредственно при вызове bjam для запуска компиляции boost. чтобы детально разобраться - пиши конфиги, с которыми ты собирал буст и твои конфиги. линковщик может не найти модуль по двум причинам: неправильно задано имя, либо не совпадает битность (32 и 64). это стандартные ошибки, но может быть и что-то экзотическое, мало ли... Сообщение отредактировал Iron Bug - 10.2.2011, 13:45 |
|
|
e.ustimenko |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
что-то у тебя каша в голове: bjam - это НЕ КОМПИЛЯТОР. это аналог autotools, если угодно - т.е. система для автоматической сборки проектов. bjam юзает конкретный компилятор, который ты ему укажешь. указывается он через bootstrap или непосредственно при вызове bjam для запуска компиляции boost. чтобы детально разобраться - пиши конфиги, с которыми ты собирал буст и твои конфиги. линковщик может не найти модуль по двум причинам: неправильно задано имя, либо не совпадает битность (32 и 64). это стандартные ошибки, но может быть и что-то экзотическое, мало ли... Boost ставился из репозитория, собирать я его не стал. |
|
|
Iron Bug |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
e.ustimenko |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Система Ubuntu 10.10.
Сборка не имеет значения, под каким компилятором. И тот, и другой стоят, просто в разных директориях. Инсталяция прошла методом: sudo aptitude install <набор пакетов> |
|
|
DEADHUNT |
![]()
Сообщение
#6
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
Собрал, как написано, проставил в опциях Eclipse. Он ее не видит icpc -L/home/evgeny/searchshortway/lib -o"ShortGraphWay" ./src/searchShortWay/SearchShortWay.o ./src/main.o ./src/interface/Interface.o -llibbgl-viz ld: cannot find -llibbgl-viz правильно будет: -lbgl-viz, т.е. lib надо опустить. |
|
|
Iron Bug |
![]()
Сообщение
#7
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
e.ustimenko |
![]()
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
icpc -L/home/evgeny/searchshortway/lib -o"ShortGraphWay" ./src/searchShortWay/SearchShortWay.o ./src/main.o ./src/interface/Interface.o -lbgl-viz
./src/searchShortWay/SearchShortWay.o: In function `SearchShortWay::openGraphvizFile(std::string)': ../src/searchShortWay/SearchShortWay.cpp:(.text+0x38cf): undefined reference to `boost::detail::graph::read_graphviz(std::string const&, boost::detail::graph::mutate_graph*)' Вот код функции:
|
|
|
DEADHUNT |
![]()
Сообщение
#9
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
а в чём сакральный смысл использования icc для дипломной работы? скачай boost из репозитария и используй gcc, тогда проблем не возникнет.
|
|
|
e.ustimenko |
![]()
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а в чём сакральный смысл использования icc для дипломной работы? скачай boost из репозитария и используй gcc, тогда проблем не возникнет. Спасибо за совет, движение, конечно, есть, но вот ошибка /usr/include/boost/graph/detail/read_graphviz_new.hpp:104: undefined reference to `boost::detail::graph::read_graphviz(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::detail::graph::mutate_graph*)' collect2: ld returned 1 exit status[ |
|
|
Iron Bug |
![]()
Сообщение
#11
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
тебе уже сказали, что разные компиляторы могут генерить НЕСОВМЕСТИМЫЙ код. и поэтому линковщик может обламываться.
чтобы они генерили совместимый код, нужно соблюдать кучу условностей и проставлять специальные ключи. а для некоторых сочетаний это в принципе невозможно. поэтому если ты уверен, что у тебя все настройки линковки правильные, что битность совпадает и всё такое, то тут есть два варианта: 1. собрать boost с icc (это возможно, даже без всяческих патчей, ну, может, пара флажков разве что. и он работает - я дома собирала) 2. взять gcc и готовый буст под него и собирать всё с gcc. а, ну ещё можно попробовать сделать динамическую линковку через dl, но тоже не факт, что будет работать. Сообщение отредактировал Iron Bug - 10.2.2011, 15:14 |
|
|
e.ustimenko |
![]()
Сообщение
#12
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
тебе уже сказали, что разные компиляторы могут генерить НЕСОВМЕСТИМЫЙ код. и поэтому линковщик может обламываться. чтобы они генерили совместимый код, нужно соблюдать кучу условностей и проставлять специальные ключи. а для некоторых сочетаний это в принципе невозможно. поэтому если ты уверен, что у тебя все настройки линковки правильные, что битность совпадает и всё такое, то тут есть два варианта: 1. собрать boost с icc (это возможно, даже без всяческих патчей, ну, может, пара флажков разве что. и он работает - я дома собирала) 2. взять gcc и готовый буст под него и собирать всё с gcc. а, ну ещё можно попробовать сделать динамическую линковку через dl, но тоже не факт, что будет работать. Я собрал все с gcc, вот следующая ошибка: /usr/include/boost/graph/detail/read_graphviz_new.hpp:104: undefined reference to `boost::detail::graph::read_graphviz(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::detail::graph::mutate_graph*)' Вот код функции, на которую он ругается:
В библиотеках линковки не уверен. То, что написано, то и подключил. Может, что еще надо, чтобы увидело именно эту функцию и именно в таком виде. Это и пытаюсь выяснить. |
|
|
kwisp |
![]()
Сообщение
#13
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
e.ustimenko,
так ты же в эклипсе ваяешь. пути к boost библиотекам прописаны? кто делает Makefile? пробывал собирать из консоли? простенький пример, по возможности в один файл, с этой функцией накидай и попробуй собрать из консоли. |
|
|
Iron Bug |
![]()
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
так, если это уже gcc ругается, то проверяй типы.
что есть dp, какого он типа и подходит ли он к вызову данной функции? тут уже смотри доки буста по библиотеке. Сообщение отредактировал Iron Bug - 10.2.2011, 15:46 |
|
|
e.ustimenko |
![]()
Сообщение
#15
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
e.ustimenko, так ты же в эклипсе ваяешь. пути к boost библиотекам прописаны? кто делает Makefile? пробывал собирать из консоли? простенький пример, по возможности в один файл, с этой функцией накидай и попробуй собрать из консоли. Ругается на то же самое, уже пробовал и не раз... Вот код функции, на которую он ругается: при чём тут код функции? ты видишь, что у тебя ошибка линковки, а не компиляции? а раз ты добрался до линковщика и компилятор не заругался - значит, дело не в синтаксисе и не в несоответствии типов. это именно ошибка линковщика и ошибка эта означает, что указанной функции в библиотеках и объектниках, которые ты подсунул линковщику, просто нет. Спасибо, я это все вижу. Теперь мне нужна библиотека, где есть эта функция. По идее, как говорилось по ссылке http://www.cs.brown.edu/~jwicks/boost/libs...d-graphviz.html, я ее собрал. Подключил, но не помогает. Поэтому ищу другие пути решения. |
|
|
Iron Bug |
![]()
Сообщение
#16
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
у тебя в файле
#include <boost/graph/graphviz.hpp> прописан? Сообщение отредактировал Iron Bug - 10.2.2011, 15:52 |
|
|
e.ustimenko |
![]()
Сообщение
#17
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#18
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
И ещё: проверь, что твой класс GraphvizDigraph
удовлетворяет MutableGraph Concept: http://www.boost.org/doc/libs/1_45_0/libs/...tableGraph.html там проверка есть - на соответствие коцепту. сначала удостоверься, что она проходит. |
|
|
e.ustimenko |
![]()
Сообщение
#19
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 10.2.2011 Пользователь №: 2402 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Нашел пример реализации, который убрал ошибку, которая у меня была, но не могу разобраться, что там что.
что такое здесь ed_node?
Причина редактирования: Евгений, используй тег code !!!
|
|
|
Iron Bug |
![]()
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
DEADHUNT |
![]()
Сообщение
#21
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#22
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
это не адрес переменной, это адрес члена класса, там выше должен стоять typedef определяющий ed_node. а какая разница? член класса - такая же переменная, как и прочие. к тому же, это может быть вовсе не член класса(к тому же, статический, что маловероятно в бусте), а переменная в какой-то области видимости, что гораздо более вероятно. |
|
|
DEADHUNT |
![]()
Сообщение
#23
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
ну, очевидно, адрес некой переменной ed_node::vertex_name. обычный сишный адрес. загнался немного. http://www.boost.org/doc/libs/1_45_0/libs/...perty_maps.html раньше немного писал с использованием BGL, но его код тоже странный. в документации написано первый аргумент property map, а у него почему-то указатель. |
|
|
Iron Bug |
![]()
Сообщение
#24
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
dynamic_properties - это сложная шаблонная структура с multimap. и там может быть что угодно в качестве ключа.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 16.7.2025, 18:26 |