2012-01-13 4 views
0

Я начинаю новый проект C++, и я хочу использовать Boost.Build/bjam.Как использовать библиотеку в нескольких классах без ошибок «множественного определения»

Я получаю ошибки «множественного определения», потому что, может быть, файл jam написан неправильно или я не включаю заголовки правильно или, возможно, библиотека не написана хорошо, что я не исследовал ,

main.cpp использует libA. rest.cpp использует libA.

libA - это библиотека заголовков. Поэтому мне нужно включить заголовки для libA в main.cpp и rest.cpp компилятора, которые жалуются на пространства имен и т. Д. ...

Я использую gcc на debian.

Вот мои вареньем файлы:

Jamroot.jam

import os ; 
import modules ; 

path-constant boost-root : "/home/dude/include/boost_1_48_0" ; 
path-constant cgi-root : "/home/dude/include/cgi-0.7.1/libs/cgi/build" ; 
path-constant BOOST_BUILD_PATH : "$(boost-root)/tools/build/v2" ; 

# path-constant include-dir : /usr/local/include ; 

use-project /boost/ : $(boost-root) ; 
use-project /boost/cgi/ : $(cgi-root) ; 

lib libsoci_core : : <file>/usr/local/lib/libsoci_core.so ; 
lib libsoci_odbc : : <file>/usr/local/lib/libsoci_odbc.so ; 
lib libboost_log : : <file>/usr/local/lib/libboost_log.so ; 

Jamfile.jam

project hello_fcgi 
: requirements 
    <library>/boost/cgi/ 
    <library>/boost/system/ 
    <library>/boost/thread/ 
    <include>/usr/local/include/soci/ 
    <include>/usr/local/include/soci/odbc/ 
    ; 

# exe rest : rest.cpp hello /boost/regex/ libboost_log libsoci_core libsoci_odbc ; 
exe hello : main.cpp rest.cpp cms.cpp /boost/regex/ libboost_log libsoci_core libsoci_odbc ; 

# Our install rule (builds binaries and copies them to <location>) 
install install 
: 
    hello 
: 
    <location>/var/www/localhost/cgi-bin/ 
; 

# Only install example if you use `bjam install' or equivalent 
explicit install ; 

Ошибки я получаю повторы:

Performing configuration checks 

    - has_icu builds   : yes 
...patience... 
...patience... 
...found 3228 targets... 
...updating 1 target... 
gcc.link bin/gcc-4.4.5/debug/hello 
bin/gcc-4.4.5/debug/rest.o: In function `basic_client': 
/usr/include/c++/4.4/exception:62: multiple definition of `boost::cgi::common::basic_client<boost::cgi::common::tags::fcgi>::basic_client()' 
bin/gcc-4.4.5/debug/main.o:/home/dude/include/cgi-0.7.1/boost/cgi/fcgi/client.hpp:44: first defined here 
+2

Вы обертываете свой импорт защитниками #ifndef? – insipid

+0

Rest.cpp содержит оба заголовка? – StarDust

+0

@insipid, Импорт? Будет ли это в файлах джем? –

ответ

3

Этот defect report выглядит актуальным: кажется, что эта библиотека «только для заголовков» подскочила на нескольких вещах, которые на самом деле не просто заголовок.

+0

Приветствия! .....;) –