Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка линковки
Форум на CrossPlatform.RU > Библиотеки > boost
Shm
Здравствуйте.
Кому не интересны мои мучения с библиотекой и тернистый путь проб и ошибок могут перейти сразу вниз и помочь мне сразу(заранее спасибо, может я тоже вам пригожусь :) )
С boost начал копаться недавно, и вообще я полный новичок в этих вопросах.
Хотелось запрограммировать кое-что используя потоки, а у меня Eclipse(wascana) стоит.
как затсавить проги компилится с
include <thread>
я не понял , и так и сяк пытался и подсунуть компилятору -std=c++0x -lpthread ... в общем полный профан я в этом деле - не получилось.
решил boost попробовать там как я понял в boost'e , как в африке есть всё, в том числе и поддержка мультимпоточного всяко-разного ....
всё началось когда я попытался скомпилировать bjam - мой cl.exe не хотел его компилировать и падал , пришлось поставить 10 Visual Studio (Которая потребовала сервиспак на виндовс 3 , который придётся ещё регистрировать , а регистрацию я чувствую не пройду...) наконец я поставил эти штуки и bjam смог собраться.
Но он упорно не хотел собирать библиотеки под MINGW .... Начитавшись форумов , я поставил cygwin ?rjnjhsq gjxtvenj c]tk e vtyz dc


Упс нельзя редактировать ? случайно ентер хзадел или кнртл пробел в общем отправилось.
продолжаю...поставил cygwin , который съел почему то всё место на диске с.. я видимо нажал инсталл всё... а удалять он ничего не хотел а только всё качал что-то . кароче прикомпиляции boost у меня закончился диск :( . пришлось перставлять cygwin на другой диск. (Теперь у меня есть папка c:\cygwin которую до сих пор не могу удалить, да фиг с ней потом)
надо сказать что bjam без параметров что то долго компилял (видимо под поставленную VS что радовало.)
Потом танцы с бубном вокруг переменной PATH, тк я не понял почему ничего не ставится, и не понял почему поставилось видимо gcc из директории cygwin/bin не умеет ничего собирать под винду, а надо было брать c:/migw/bin/gcc.exe и он вроде чегото собрал, вроде ещё рестартить комп тоже пондобилось . после переставок cygwin и mingw
Короче моё наблюдение такое в директории path путь c:/migw/bin долже быть раньше чем e:/cyqwin/bin
короче ура! 3 дня танцев с бубном и чтения странного привели меня что в директории
........
c:\Boost\lib\libboost_unit_test_framework-mgw45-mt-1_46_1.a
c:\Boost\lib\libboost_thread-mgw45-mt-d-1_46_1.a
c:\Boost\lib\libboost_thread-mgw45-mt-1_46_1.a
........
появились какие-то файлы ;-)
но пример откопанный откуда.то не собирается
может я не правильно понимаю суть (я переименовал c:\Boost\lib\libboost_thread-mgw45-mt-d-1_46_1.a->c:\Boost\lib\libboost_thread.a ато там писали про много слешей в путях, я уж думал ещё какие символы являются разделителями параметров случайно например тире, поэтому и переименовал)?
вот что пишется при сбоке :
g++ -IC:\cpp\boost_1_46_1 -O0 -g3 -Wall -c -fmessage-length=0 -osrc\Boost_Thread.o ..\src\Boost_Thread.cpp
g++ -LC:\Boost\lib -oBoost_Thread.exe src\Boost_Thread.o -llibboost_thread
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibboost_thread
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 453 ms.
...... Не посововетуте я уже и 5 раз прочитал про параметр -l и -L для gcc и пробовал тоже самое у пингвина, тьфу у cygwin сделать Неплучается, тот же эффект линковщик не видит файл библиотекой xxx.a (или в другом проблема?)
Iron Bug
значит, что-то не так делал. буст спокойно собирается любыми студиями. он проверен для
Цитата
Windows:
* Visual C++: 7.1, 8.0, 9.0 and 10.0.
* GCC, mingw: 4.4.0.

см. доки на последнюю версию: http://www.boost.org/users/history/version_1_46_1.htm
bjam также без проблем собирается. причём он сам собирается при запуске bootstrap'а и дополнительных усилий вообще не требуется. разве что указать компилятор, если он установлен как-то слишком нестандартно, но это крайняя редкость в венде. студию он находит сам без проблем и ему абсолютно пофиг на её версию.
читай руководство по сборке буста под вендой: http://www.boost.org/doc/libs/1_46_1/more/...ed/windows.html

про cygwin:
-lboost_thread -L<путь до библиотеки>
Shm
Собрал по твоему совету из другой ветки
set PATH="c:\MinGW\bin";%PATH%
bjam -j2 --toolset=gcc --build-dir="D:\Temp\BoostBuild" --build-type=complete stage --layout=tagged

всё собралось вроде как и появились файлики
Раскрывающийся текст

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\threading-multi\win32\thread.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\threading-multi\libboost_thread-mt.dll.a
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\threading-multi\libboost_thread-mt.dll

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\threading-multi\win32\thread.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\threading-multi\libboost_thread-mt.a

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\runtime-link-static\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\runtime-link-static\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\runtime-link-static\threading-multi\win32\thread.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\release\link-static\runtime-link-static\threading-multi\libboost_thread-mt-s.a

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\threading-multi\win32\thread.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\threading-multi\libboost_thread-mt-d.dll.a
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\threading-multi\libboost_thread-mt-d.dll

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\threading-multi\win32\thread.o

d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\threading-multi\libboost_thread-mt-d.a
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\tss_pe.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\tss_dll.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\thread.o
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\libboost_thread-mt-sd.a

пытаюсь собрать с полученной библиотекой файл ...boost_1_46_1\libs\thread\tutorial\helloworld.cpp
Раскрывающийся текст


// Copyright © 2001-2003
// William E. Kempf
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#include <boost/thread/thread.hpp>
#include <iostream>

void helloworld()
{
std::cout << "Hello World!" << std::endl;
}

int main()
{
boost::thread thrd(&helloworld);
thrd.join();
}



этими просто тупо открываю bat файл и пробую так:
cd c:\cpp\boost_1_46_1\libs\thread\tutorial\
gcc -Ic:\Boost\include\boost-1_46_1  helloworld.cpp -ld:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\libboost_thread-mt-sd.a -ohelloworld

не собирает (collect2: ld returned 1 exit status)
так:
cd c:\cpp\boost_1_46_1\libs\thread\tutorial\
copy d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\libboost_thread-mt-sd.a c:\cpp\boost_1_46_1\libs\thread\tutorial\thread.a
gcc -Ic:\Boost\include\boost-1_46_1  helloworld.cpp -Lc:\cpp\boost_1_46_1\libs\thread\tutorial\ -lthread.a -ohelloworld
del c:\cpp\boost_1_46_1\libs\thread\tutorial\thread.a

не собирает (C:\MinGW\bin\ld.exe: cannot find -lthread.a)
так:
cd c:\cpp\boost_1_46_1\libs\thread\tutorial\
copy d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\libboost_thread-mt-sd.a c:\MinGW\lib\libthread.a
gcc -Ic:\Boost\include\boost-1_46_1  helloworld.cpp -Lc:\MinGW\lib\ -llibthread.a -ohelloworld
del c:\MinGW\lib\libthread.a

(C:\MinGW\bin\ld.exe: cannot find -llibthread.a)

ладно может попробывать подсунуть "obj" файлы
cd c:\cpp\boost_1_46_1\libs\thread\tutorial\
gcc -Ic:\Boost\include\boost-1_46_1  helloworld.cpp  d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\tss_pe.o d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\tss_dll.o d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\thread.o


не получается куча ошибок типа ,
d:\Temp\BoostBuild\boost\bin.v2\libs\thread\build\gcc-mingw-4.5.2\debug\link-static\runtime-link-static\threading-multi\win32\thread.o:c:\cpp\boost_1_46_1/./boost/thread/win32/once.hpp:178: undefined reference to `__cxa_rethrow'
...
в общем что то я не понимаю что делать уже мозг свернулся и не понимаю где посмотреть.
у меня была идея подсунуть файлы из других директорий

пойду ка я посплю...
Iron Bug
во-перых, судя по строке сборки, буст будет весь собран в \Boost\include\boost-1_46_1\stage\lib и из темпа его выковыривать смысла нет. во-вторых, проверь для начала без буста, что у тебя pthreads работает и все нужные пути для MinGW настроены.
ошибка с rethrow - это ошибка обработки исключений. не выствлен флаг и используются исключения. напиши сначала простой пример без исключений и проверь, что у тебя мингв его собирает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.