Error Ogre3D on linux - linux

I'm beginner in ogre3D and I'm build mi first program in Ogre3D, but when I try to compile the program I get this error:
In function `main':
test.cpp:(.text+0x14): undefined reference to `std::allocator<char>::allocator()'
test.cpp:(.text+0x30): undefined reference to `std::basic_string<char,
std::char_traits<char>, std::allocator<char> >::basic_string(char const*,
std::allocator<char> const&)'
test.cpp:(.text+0x40): undefined reference to `std::allocator<char>::allocator()'
test.cpp:(.text+0x5c): undefined reference to `std::basic_string<char,
std::char_traits<char>, std::allocator<char> >::basic_string(char const*,
std::allocator<char> const&)'
test.cpp:(.text+0x6c): undefined reference to `std::allocator<char>::allocator()'
test.cpp:(.text+0x88): undefined reference to `std::basic_string<char,
std::char_traits<char>, std::allocator<char> >::basic_string(char const*,
std::allocator<char> const&)'
And Continue the fix
I Compile the program manually:
gcc test.cpp -o test.o test
And my file test is this:
#include <Ogre.h>
using namespace Ogre;
int main()
{
Root* root= new Root();
if( !root->restoreConfig() )
{
root->showConfigDialog();
root->saveConfig();
}
return 0;
}
How to fix my problem?
I'm use Debian Wheezy.
The Version Ogre3D: 1.8
Thanks for your answers.

This is a linker error.
Use pkg-config --libs to retrieve the correct linker options
g++ -o test test.cpp -Wall $(pkg-config --cflags OGRE) $(pkg-config --libs OGRE) -lboost_system
If you have installed OGRE in a nonstandard location (say /opt/ogre), you may need to call pkg-config with the PKG_CONFIG_PATH environment variable set:
PKG_CONFIG_PATH=/opt/ogre/lib/pkgconfig pkg-config --libs OGRE

This is a linker error, but not to Ogre3d, but to the STL (Standard Template Library). The reason for this is that you are using gcc, when you should be using g++. However, I am surprised that you aren't getting linker errors to Ogre as well, and the solution to that is like Thomas suggested (though he also uses "g++" in his example).

Related

Choosing a gcc compiler on a Linux machine for compilation with "make"

I encountered the following error message on a Linux machine while attempting to compile a program with the command "make":
build/chem/rdm.o: In function `RDM::get_2rdm_slow(std::vector<Det, std::allocator<Det> > const&, std::vector<double
, std::allocator<double> > const&, Integrals const&)':
rdm.cc:(.text+0x37d2): undefined reference to `Timer::checkpoint(std::__cxx11::basic_string<char, std::char_traits<
char>, std::allocator<char> > const&)'
I think the compiler I am using, gcc/6.5.0, is the wrong version, but I am not completely sure that this is the issue. Does anyone have an idea of what could be going on?
Makefile

Errors while statically compiling poco with ssl in gcc

I have all the .a files in usr/local/lib. Moreover I've deleted all the .so libraries from the folder to ensure that it compiles statically. I'm using this command to compile it-
g++ HttpAPICall.cpp ... main.cpp -Bstatic -L/usr/local/lib/ -lPocoUtil -lPocoXML -lcrypto -lssl \
-lPocoCrypto -lgumbo -lPocoNet -lPocoJSON -lPocoNetSSL -lPocoFoundation -luuid -std=gnu++11 -o analyzer
I'm getting the following error-
/usr/local/lib//libPocoNetSSL.a(SSLManager.o): In function `Poco::Net::SSLManager::appConfig()':
SSLManager.cpp:(.text+0x383): undefined reference to `Poco::Util::Application::_pInstance'
SSLManager.cpp:(.text+0x3b5): undefined reference to `Poco::Util::Application::_pInstance'
/usr/local/lib//libPocoNetSSL.a(SSLManager.o): In function `Poco::Net::SSLManager::initPassphraseHandler(bool)':
SSLManager.cpp:(.text+0xd58): undefined reference to `Poco::Util::AbstractConfiguration::getString(std::string const&, std::string const&) const'
SSLManager.cpp:(.text+0xdd6): undefined reference to `Poco::Util::UnknownOptionException::UnknownOptionException(std::string const&, int)'
SSLManager.cpp:(.text+0xe01): undefined reference to `Poco::Util::UnknownOptionException::~UnknownOptionException()'
SSLManager.cpp:(.text+0xe06): undefined reference to `typeinfo for Poco::Util::UnknownOptionException'
/usr/local/lib//libPocoNetSSL.a(SSLManager.o): In function `Poco::Net::SSLManager::initCertificateHandler(bool)':
SSLManager.cpp:(.text+0x15a8): undefined reference to `Poco::Util::AbstractConfiguration::getString(std::string const&, std::string const&) const'
I've read that the order or compilation matters in such case. I've tried -WL,--start-group --end-group as well. No luck with that. The same code using mac static libraries is getting compiled easily on xcode. Also, by using the dynamic libraries, the code compiles fine on linux as well. Kindly help me with static compiling on linux.

Compile NSIS under Ubuntu 12.04

I download nsis-2.46-src.tar.bz2 from https://sourceforge.net/projects/nsis/files/ and I'm trying to compile makensis but get the errors like:
/usr/bin/ld: i386 architecture of input file `build/release/makensis/winchar.o' is incompatible with i386:x86-64 output
build.cpp:(.text+0x35eb): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*, unsigned int)'
What is wrong? And where I can get Stubs, Plugins, Include components after compilation of makensis? Help me please.
Before compilation I have install mingw-w64, gcc, g++

Undefined references in autotools project

Here's the project I'm developing: https://github.com/bigdatadev/riemannpp
I'm a relative beginner to autotools, and I'm having difficulty getting my shared object riemannpp to link against another library called riemann-client (link in the README.md).
I find the compile / link flags for riemann-client using PKG_CHECK_MODULES in configure.ac (ln. 38). I then use the flags in Makefile.am when I build the .so using LIBADD (ln. 29).
If you try to compile the sources (make), libriemannpp.so will build, but seems that I am doing something very wrong when I try to link the client and unit tests. I add the reference to libriemannpp.so by referencing libriemannpp.la (Makefile.am ln. 41).
The error I'm getting is undefined references to functions from the riemann-client library which riemannpp.so depends. nm shows that riemannpp.so has undefined references, but ldd shows no dependency on riemann-client, which nm shows does exports the missing symbols. I have tried fiddling with the Makefile.am to get the riemannpp library to link properly, but I'm giving in and am hoping an expert will be able to help me out.
If anyone can help me understand what I'm doing wrong and how to fix it I would be very grateful.
I'm using Ubuntu 14.04 with default system packages for gcc, autoconf, automake and libtool.
EDIT: Some more information
ldd output on libriemannpp.so:
linux-vdso.so.1 => (0x00007fff36b29000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9b13f54000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9b13b8e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9b13977000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9b13671000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9b14488000)
nm output on libriemannpp.so:
U _Z17riemann_event_newv
U _Z17riemann_event_setP6_Eventz
U _Z17riemann_query_newPKc
U _Z18riemann_client_newv
U _Z18riemann_event_freeP6_Event
U _Z18riemann_query_freeP6_Query
... etc ...
nm output on libriemann-client.so:
0000000000002c70 T riemann_event_attribute_add
0000000000002cd0 T riemann_event_create
0000000000002610 T riemann_event_free
00000000000025f0 T riemann_event_new
... etc ...
So it seems that the symbols are correctly defined in libriemann-client.so. At least I'm not going completely insane...
The offending build output:
/bin/bash ./libtool --tag=CXX --mode=link g++ -g -O2 -std=c++11 -o src/client/riemannpp src/client/riemannpp.o ./src/riemannpp/libriemannpp.la -L/usr/local/lib -lriemann-client
libtool: link: g++ -g -O2 -std=c++11 -o src/client/.libs/riemannpp src/client/riemannpp.o ./src/riemannpp/.libs/libriemannpp.so -L/usr/local/lib /usr/local/lib/libriemann-client.so
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_send_message(_riemann_client_t*, _Msg*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_query_set_string(_Query*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_send_message_oneshot(_riemann_client_t*, _Msg*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_disconnect(_riemann_client_t*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_set(_Attribute*, char const*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_new()'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_free(_Attribute*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_event_new()'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_free(_riemann_client_t*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_query_new(char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_create(char const*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_message_set_query(_Msg*, _Query*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_event_set(_Event*, ...)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_query_free(_Query*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_event_attribute_add(_Event*, _Attribute*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_set_value(_Attribute*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_new()'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_message_new()'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_connect(_riemann_client_t*, riemann_client_type_t, char const*, int)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_event_tag_add(_Event*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_message_free(_Msg*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_attribute_set_key(_Attribute*, char const*)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_message_set_events_n(_Msg*, unsigned long, _Event**)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_client_create(riemann_client_type_t, char const*, int)'
./src/riemannpp/.libs/libriemannpp.so: undefined reference to `riemann_event_free(_Event*)'
Steps to try it out:
$ git clone git#github.com:algernon/riemann-c-client.git
$ cd riemann-c-client
$ sudo apt-get install protobuf-c-compiler # ubuntu
$ ./configure && make && sudo make install
$ cd ..
$ git clone git#github.com:bigdatadev/riemannpp.git
$ cd riemannpp
$ ./autogen.sh
$ ./configure && make
Note that you will have unresolved symbol references in libriemannpp.so when compiling the client program, despite libriemannpp having references to the riemann-c-client (obtained via pkg-config riemann-client --cflags --libs).
EDIT: I get the same problem even if I run ./configure --disable-shared, which seems to rule out any possibility of a bug in the shared object I'm building. I'm clearly missing how to add the dependency information to the library, but Google isn't giving any answers away.
It seems very unlikely that this is a bug in the riemann-client library, as that builds and passes its unit tests flawlessly.
riemann-client fails to use
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
in its header files, therefore your riemanpp code parts think it is calling C++ code when in fact it is C.
And you cannot just use
#ifdef __cplusplus
extern "C" {
#endif
#include <riemann/event.h>
...
as that could possibly subject C++ headers to be wrongly wrapped into C calling conventions. (Meaning the fix must occur in riemann-client)

How to build a project (say zeromq) as static library and linked it into my project

I want to use the zeroMQ in my project
and I run the configure as below to build the libaray into my home folder
./configure --enable-static --disable-shared --prefix=/home/xx/out
then I link my project by
gcc -o myproject x.c y.c /home/xx/out/libzmq.a
but there still a lot of link error like below:
../zmq/lib/libzmq.a(libzmq_la-ip.o): In function zmq::resolve_ip_interface(sockaddr_storage*, unsigned int*, char const*)':
/home/sureone/share/zeromq-2.2.0/src/ip.cpp:221: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
/home/sureone/share/zeromq-2.2.0/src/ip.cpp:222: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
../zmq/lib/libzmq.a(libzmq_la-ip.o): In function zmq::resolve_ip_hostname(sockaddr_storage*, unsigned int*, char const*)':
/home/sureone/share/zeromq-2.2.0/src/ip.cpp:314: undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, uns
...........
gcc -o myproject x.c y.c /home/xx/out/libzmq.a
Since ZeroMQ is (apparently) using C++, you need to use appropriate compiler driver (g++ in this case) to link it.
Try this:
gcc -c x.c y.c
g++ -o myproject x.o y.o /home/xx/out/libzmq.a

Resources