crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 13:27
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   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
  опции профиля:
сообщение 10.2.2011, 13:43
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


что-то у тебя каша в голове:
bjam - это НЕ КОМПИЛЯТОР. это аналог autotools, если угодно - т.е. система для автоматической сборки проектов.
bjam юзает конкретный компилятор, который ты ему укажешь. указывается он через bootstrap или непосредственно при вызове bjam для запуска компиляции boost.

чтобы детально разобраться - пиши конфиги, с которыми ты собирал буст и твои конфиги. линковщик может не найти модуль по двум причинам: неправильно задано имя, либо не совпадает битность (32 и 64). это стандартные ошибки, но может быть и что-то экзотическое, мало ли...

Сообщение отредактировал Iron Bug - 10.2.2011, 13:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 13:57
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 10.2.2011, 16:43) *
что-то у тебя каша в голове:
bjam - это НЕ КОМПИЛЯТОР. это аналог autotools, если угодно - т.е. система для автоматической сборки проектов.
bjam юзает конкретный компилятор, который ты ему укажешь. указывается он через bootstrap или непосредственно при вызове bjam для запуска компиляции boost.

чтобы детально разобраться - пиши конфиги, с которыми ты собирал буст и твои конфиги. линковщик может не найти модуль по двум причинам: неправильно задано имя, либо не совпадает битность (32 и 64). это стандартные ошибки, но может быть и что-то экзотическое, мало ли...


Boost ставился из репозитория, собирать я его не стал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 14:07
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


что значит
Цитата(e.ustimenko @ 10.2.2011, 15:57) *
ставился из репозитория
?
т.е. скачан зип с бинарниками для конкретного компилятора? репозиторий - это обычно сорц.
к тому же, у тебя в заголовке темы зачем-то стоят и gcc и icc разом. и это не очень понятно: что и с чем собирается и под какую систему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 14:15
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Система Ubuntu 10.10.

Сборка не имеет значения, под каким компилятором. И тот, и другой стоят, просто в разных директориях.

Инсталяция прошла методом: sudo aptitude install <набор пакетов>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 10.2.2011, 14:17
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(e.ustimenko @ 10.2.2011, 13:27) *
Собрал, как написано, проставил в опциях 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
  опции профиля:
сообщение 10.2.2011, 14:22
Сообщение #7


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


DEADHUNT правильно написал. скорее всего, ошибка в названии библиотеки.

Цитата(e.ustimenko @ 10.2.2011, 16:15) *
Сборка не имеет значения, под каким компилятором.

представь себе, имеет. и далеко не всегда разные компиляторы генерят совместимый код. а тем более с разными опциями и под разные системы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 14:23
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   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*)'


Вот код функции:

GraphvizDigraph SearchShortWay::openGraphvizFile(string path)
{
    GraphvizDigraph g_dot;
    dynamic_properties dp;

    boost::read_graphviz(path, g_dot,dp);

    return g_dot;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 10.2.2011, 14:29
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


а в чём сакральный смысл использования icc для дипломной работы? скачай boost из репозитария и используй gcc, тогда проблем не возникнет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 14:42
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(DEADHUNT @ 10.2.2011, 17:29) *
а в чём сакральный смысл использования 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
  опции профиля:
сообщение 10.2.2011, 15:13
Сообщение #11


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


тебе уже сказали, что разные компиляторы могут генерить НЕСОВМЕСТИМЫЙ код. и поэтому линковщик может обламываться.
чтобы они генерили совместимый код, нужно соблюдать кучу условностей и проставлять специальные ключи. а для некоторых сочетаний это в принципе невозможно.
поэтому если ты уверен, что у тебя все настройки линковки правильные, что битность совпадает и всё такое, то тут есть два варианта:
1. собрать boost с icc (это возможно, даже без всяческих патчей, ну, может, пара флажков разве что. и он работает - я дома собирала)
2. взять gcc и готовый буст под него и собирать всё с gcc.

а, ну ещё можно попробовать сделать динамическую линковку через dl, но тоже не факт, что будет работать.

Сообщение отредактировал Iron Bug - 10.2.2011, 15:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 15:19
Сообщение #12


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 10.2.2011, 18:13) *
тебе уже сказали, что разные компиляторы могут генерить НЕСОВМЕСТИМЫЙ код. и поэтому линковщик может обламываться.
чтобы они генерили совместимый код, нужно соблюдать кучу условностей и проставлять специальные ключи. а для некоторых сочетаний это в принципе невозможно.
поэтому если ты уверен, что у тебя все настройки линковки правильные, что битность совпадает и всё такое, то тут есть два варианта:
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*)'

Вот код функции, на которую он ругается:

GraphvizDigraph SearchShortWay::openGraphvizFile(string path)
{
    GraphvizDigraph g_dot;
    dynamic_properties dp;

    boost::read_graphviz(path, g_dot,dp);

    return g_dot;
}


В библиотеках линковки не уверен. То, что написано, то и подключил. Может, что еще надо, чтобы увидело именно эту функцию и именно в таком виде.

Это и пытаюсь выяснить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.2.2011, 15:31
Сообщение #13


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


e.ustimenko,
так ты же в эклипсе ваяешь.
пути к boost библиотекам прописаны?
кто делает Makefile?

пробывал собирать из консоли?

простенький пример, по возможности в один файл, с этой функцией накидай и попробуй собрать из консоли.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 15:40
Сообщение #14


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


так, если это уже gcc ругается, то проверяй типы.
что есть dp, какого он типа и подходит ли он к вызову данной функции?
тут уже смотри доки буста по библиотеке.

Сообщение отредактировал Iron Bug - 10.2.2011, 15:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 15:48
Сообщение #15


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 10.2.2011, 18:31) *
e.ustimenko,
так ты же в эклипсе ваяешь.
пути к boost библиотекам прописаны?
кто делает Makefile?

пробывал собирать из консоли?

простенький пример, по возможности в один файл, с этой функцией накидай и попробуй собрать из консоли.


Ругается на то же самое, уже пробовал и не раз...

Цитата(Iron Bug @ 10.2.2011, 18:40) *
Цитата(e.ustimenko @ 10.2.2011, 17:19) *
Вот код функции, на которую он ругается:

при чём тут код функции? ты видишь, что у тебя ошибка линковки, а не компиляции? а раз ты добрался до линковщика и компилятор не заругался - значит, дело не в синтаксисе и не в несоответствии типов. это именно ошибка линковщика и ошибка эта означает, что указанной функции в библиотеках и объектниках, которые ты подсунул линковщику, просто нет.


Спасибо, я это все вижу. Теперь мне нужна библиотека, где есть эта функция. По идее, как говорилось по ссылке http://www.cs.brown.edu/~jwicks/boost/libs...d-graphviz.html, я ее собрал.
Подключил, но не помогает. Поэтому ищу другие пути решения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 15:51
Сообщение #16


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


у тебя в файле
#include <boost/graph/graphviz.hpp>
прописан?

Сообщение отредактировал Iron Bug - 10.2.2011, 15:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 15:54
Сообщение #17


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 10.2.2011, 18:51) *
у тебя в файле
#include <boost/graph/graphviz.hpp>
прописан?


Да, там все есть. Проверял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 16:02
Сообщение #18


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


И ещё: проверь, что твой класс GraphvizDigraph
удовлетворяет MutableGraph Concept:
http://www.boost.org/doc/libs/1_45_0/libs/...tableGraph.html
там проверка есть - на соответствие коцепту. сначала удостоверься, что она проходит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
e.ustimenko
  опции профиля:
сообщение 10.2.2011, 16:44
Сообщение #19


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 10.2.2011
Пользователь №: 2402

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нашел пример реализации, который убрал ошибку, которая у меня была, но не могу разобраться, что там что.

bool file; 
ifstream in(openfile.c_str(), ios::in); 
dynamic_properties dp; 
dp.property ("node_id", get(&ed_node::vertex_name, ug)); <--simple 
file = read_graphviz(in, ug, dp, "node_id");


что такое здесь ed_node?
Причина редактирования: Евгений, используй тег code !!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 16:53
Сообщение #20


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(e.ustimenko @ 10.2.2011, 18:44) *
что такое здесь ed_node?

ну, очевидно, адрес некой переменной ed_node::vertex_name. обычный сишный адрес.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 10.2.2011, 17:14
Сообщение #21


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Iron Bug @ 10.2.2011, 16:53) *
ну, очевидно, адрес некой переменной ed_node::vertex_name. обычный сишный адрес.

это не адрес переменной, это адрес члена класса, там выше должен стоять typedef определяющий ed_node.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 17:17
Сообщение #22


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(DEADHUNT @ 10.2.2011, 19:14) *
это не адрес переменной, это адрес члена класса, там выше должен стоять typedef определяющий ed_node.

а какая разница? член класса - такая же переменная, как и прочие.
к тому же, это может быть вовсе не член класса(к тому же, статический, что маловероятно в бусте), а переменная в какой-то области видимости, что гораздо более вероятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 10.2.2011, 17:43
Сообщение #23


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Iron Bug @ 10.2.2011, 16:53) *
ну, очевидно, адрес некой переменной ed_node::vertex_name. обычный сишный адрес.

загнался немного. http://www.boost.org/doc/libs/1_45_0/libs/...perty_maps.html
раньше немного писал с использованием BGL, но его код тоже странный. в документации написано первый аргумент property map, а у него почему-то указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.2.2011, 18:02
Сообщение #24


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


dynamic_properties - это сложная шаблонная структура с multimap. и там может быть что угодно в качестве ключа.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 16.7.2025, 18:26