当前位置: 代码迷 >> 驱动开发 >> poco库编译成ARM格式,在应用时出有关问题(非代码有关问题),求解!
  详细解决方案

poco库编译成ARM格式,在应用时出有关问题(非代码有关问题),求解!

热度:167   发布时间:2016-04-28 10:03:36.0
poco库编译成ARM格式,在应用时出问题(非代码问题),求解!!!
环境:ubuntu10.4
编译链:4.2.2-eabi
IDE:eclipse linux 
编译poco库时,先使用默认配置,编译成x86格式,然后在eclipse中编译poco代码,没有问题。
然后配置成ARM-Linux配置文件。./configure --config=ARM=Linux 然后编辑,安装,没有问题。
然后再eclipse中编译代码,并将编译工具变为arm-linux-g++。出现以下错误信息:

**** Build of configuration Debug for project poco ****

make all 
Building file: ../src/poco.cpp
Invoking: GCC C++ Compiler
/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-g++ -I/usr/local/include/ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/poco.d" -MT"src/poco.d" -o"src/poco.o" "../src/poco.cpp"
Finished building: ../src/poco.cpp
 
Building target: poco
Invoking: GCC C++ Linker
/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-g++ -L/usr/local/lib -o"poco"  ./src/poco.o   -lPocoFoundation -lCppUnit -lPocoUtil -lPocoNet -lPocoXML
./src/poco.o: In function `HTTPTimeServer::handleHelp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/opt/TE/poco/Debug/../src/poco.cpp:139: undefined reference to `Poco::Util::HelpFormatter::setCommand(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/opt/TE/poco/Debug/../src/poco.cpp:140: undefined reference to `Poco::Util::HelpFormatter::setUsage(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/opt/TE/poco/Debug/../src/poco.cpp:142: undefined reference to `Poco::Util::HelpFormatter::setHeader(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/opt/TE/poco/Debug/../src/poco.cpp:143: undefined reference to `Poco::Util::HelpFormatter::format(std::basic_ostream<char, std::char_traits<char> >&) const'
./src/poco.o: In function `HTTPTimeServer::defineOptions(Poco::Util::OptionSet&)':
/opt/TE/poco/Debug/../src/poco.cpp:132: undefined reference to `Poco::Util::Option::Option(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
./src/poco.o: In function `Poco::Logger::log(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Message::Priority)':
/usr/local/include/Poco/Logger.h:605: undefined reference to `Poco::Message::Message(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Poco::Message::Priority)'
./src/poco.o: In function `Poco::DateTimeFormatter::format(Poco::DateTime const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
/usr/local/include/Poco/DateTimeFormatter.h:189: undefined reference to `Poco::DateTimeFormatter::append(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, Poco::DateTime const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
./src/poco.o: In function `TimeRequestHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)':
/opt/TE/poco/Debug/../src/poco.cpp:56: undefined reference to `Poco::Net::HTTPMessage::setContentType(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
./src/poco.o: In function `Poco::MutexImpl::lockImpl()':
/usr/local/include/Poco/Mutex_POSIX.h:82: undefined reference to `Poco::SystemException::SystemException(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
./src/poco.o: In function `Poco::MutexImpl::unlockImpl()':
/usr/local/include/Poco/Mutex_POSIX.h:101: undefined reference to `Poco::SystemException::SystemException(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
./src/poco.o: In function `HTTPTimeServer::main(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
/opt/TE/poco/Debug/../src/poco.cpp:153: undefined reference to `Poco::Util::AbstractConfiguration::getInt(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) const'
/opt/TE/poco/Debug/../src/poco.cpp:156: undefined reference to `Poco::Util::AbstractConfiguration::getString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
./src/poco.o:(.rodata._ZTV14HTTPTimeServer[vtable for HTTPTimeServer]+0x28): undefined reference to `Poco::Util::Application::handleOption(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: ld returned 1 exit status
make: *** [poco] 错误 1

求各位各抒己见!!!急啊 !
------解决思路----------------------
经过这两天的研究,这个问题是这样子的:
把poco生成ARM格式后,库的里面的很多函数的参数变成了stl_std::格式的,而不在是std::。
所以,在编译链接的时候头文件要指明STLport的头文件路径
链接库的时候要加上-lstlport。
这样就ok了!!!