Yo estaba tratando de instalar Boost en una máquina Linux (versión CentOs, Linux 2.6.9-67.ELsmp). Seguí con las instrucciones en la página web de Boost Getting Started. descargué y extraje los archivos, luego agregué el prefijo porque no soy el usuario raíz.referencia indefinida cuando gcc compilar Boost :: expresiones regulares con varias versiones de impulso existe
./bootstrap.sh --prefix=/my_path/boost-1.49.0
./b2 install
voy a /my_path/boost-1.49.0 y comprobar que hay/include/impulso/y/lib/contiene archivos allí.
Asimismo, establecer LD_LIBRARY_PATH para /my_path/boost-1.49.0/lib/.
Para probar si ha instalado correctamente, puedo compilar el código siguiente:
main.cpp
#include <boost/regex.hpp>
#include <iostream>
#include <string>
using namespace boost;
using namespace std;
int main(int argc, char *argv[])
{
string line = "12345";
regex pattern("^123");
if (regex_match(line, pattern)) cout << "match." << endl;
else cout << "not match." << endl;
return 1;
}
y compilar por orden:
g++ -v -I /my_path/boost-1.49.0/include/boost -L /my_path/boost-1.49.0/lib main.cpp -lboost_regex -o example
y generar errores siguientes:
Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
/usr/libexec/gcc/x86_64-redhat-linux/3.4.6/cc1plus -quiet -v -I /my_path/boost-1.49.0/include/boost/ -D_GNU_SOURCE main.cpp -quiet -dumpbase main.cpp -mtune=k8 -auxbase main -version -o /tmp/ccW0ON8y.s
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/my_path/boost-1.49.0/include/boost/
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/x86_64-redhat-linux
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/backward
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/include
/usr/include
End of search list.
GNU C++ version 3.4.6 20060404 (Red Hat 3.4.6-9) (x86_64-redhat-linux)
compiled by GNU C version 3.4.6 20060404 (Red Hat 3.4.6-9).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
as -V -Qy -o /tmp/ccpu82sB.o /tmp/ccW0ON8y.s
GNU assembler version 2.15.92.0.2 (x86_64-redhat-linux) using BFD version 2.15.92.0.2 20040927
/usr/libexec/gcc/x86_64-redhat-linux/3.4.6/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o example /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/3.4.6/crtbegin.o -L /my_path/boost-1.49.0/lib/ -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../.. -L/lib/../lib64 -L/usr/lib/../lib64 /tmp/ccpu82sB.o -lboost_regex -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/3.4.6/crtend.o /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/crtn.o
/tmp/ccpu82sB.o(.gnu.linkonce.t._ZN5boost11basic_regexIcNS_12regex_
traitsIcEESaIcEEC1EPKcjRKS3_+0x27): In function `boost::basic_regex<char,
boost::regex_traits<char>, std::allocator<char> >::basic_regex(char const*,
unsigned int, std::allocator<char> const&)'::
undefined reference to `boost::reg_expression<char, boost::regex_traits<char>,
std::allocator<char> >::reg_expression(char const*, unsigned int,
std::allocator<char> const&)'
/tmp/ccpu82sB.o(.gnu.linkonce.t.
_ZN5boost11basic_regexIcNS_12regex_traitsIcEESaIcEED1Ev+0x11): In function
`boost::basic_regex<char, boost::regex_traits<char>,
std::allocator<char>>::~basic_regex()':
: undefined reference to `boost::reg_expression<char, boost::regex_traits<char>,
std::allocator<char> >::~reg_expression()'
/tmp/ccpu82sB.o(.gnu.linkonce.t.
_ZN5boost9re_detail12perl_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub
_matchIS6_EEENS_12regex_traitsIcEESaIcEEC1ES6_S6_RNS_13match_resultsIS6_S9_EERKNS_
14reg_expressionIcSB_SC_EENS_15regex_constants12_match_flagsE+0xa1): In function
`boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >,
boost::regex_traits<char>, std::allocator<char>>
::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char
const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&,
boost::reg_expression<char, boost::regex_traits<char>, std::allocator<char> > const&,
boost::regex_constants::_match_flags)':
sin embargo si sólo compila con el impulso predeterminado que administran el sistema instalado
g++ -v main.cpp -lboost_regex -o example
entonces está bien.
ejemplo LDD tengo
libboost_regex.so.1 => /usr/lib64/libboost_regex.so.1 (0x0000002a95557000)
Debido a alguna razón el me preguntan no actualizar el impulso en/usr/include/impulso. ¿Hay algo que pueda ayudarme a resolver este problema que instale boost en una carpeta local y simplemente cambie la ruta de cómo incluirlo y vincularlo para usar versiones diferentes?
No estoy seguro de si esta pregunta es tonta o no, pero sí busqué con google, pero la mayoría de las preguntas relacionadas con no están correctamente configuradas -I, -L y -l en el comando gcc. No tengo idea de el mensaje de error anterior, realmente me vuelvo loco. Cualquier ayuda es apreciada.
Gracias por su paciencia y tiempo.
El enlazador claramente no incluye las bibliotecas de impulsar instalados. ¿Funciona cambiar '-L' a '-L '? –
HonkyTonk
No. De hecho, mi comando de compilación no tenía el espacio entre -L y path. Es un error en la publicación, lo siento. – user1350816