title: QT shared library undefined reference to
body: <p>I'm studying linking shared libraries in QT, tried tutorials but nothing works.
  Can somebody help me to find a mistake?</p>
  
  <p>I have an error "Undefined reference to test" when I'm compiling my test project.</p>
  
  <p>Project where i'm trying to link my lib: 
  loadTestLib.pro:</p>
  
  <pre><code>#-------------------------------------------------
  #
  # Project created by QtCreator 2013-04-22T15:32:30
  #
  #-------------------------------------------------
  
  QT       += core
  
  QT       -= gui
  
  TARGET = loadTestLib
  CONFIG   += console
  CONFIG   -= app_bundle
  
  TEMPLATE = app
  
  
  SOURCES += main.cpp
  LIBS+=-L../libtest.so.1.0.0
  
  HEADERS += \
      test_global.h \
      test.h
  </code></pre>
  
  <p>main.cpp:</p>
  
  <pre><code>#include &lt;QCoreApplication&gt;
  #include "test.h"
  
  int main(int argc, char *argv[])
  {
      QCoreApplication a(argc, argv);
      Test test;
      return a.exec();
  }
  </code></pre>
  
  <p>test_global.h:</p>
  
  <pre><code>#ifndef TEST_GLOBAL_H
  #define TEST_GLOBAL_H
  
  #include &lt;QtCore/qglobal.h&gt;
  
  #if defined(TEST_LIBRARY)
  #  define TESTSHARED_EXPORT Q_DECL_EXPORT
  #else
  #  define TESTSHARED_EXPORT Q_DECL_IMPORT
  #endif
  
  #endif // TEST_GLOBAL_H
  </code></pre>
  
  <p>test.h:</p>
  
  <pre><code>#ifndef TEST_H
  #define TEST_H
  
  #include "test_global.h"
  
  class TESTSHARED_EXPORT Test
  {
  public:
      Test();
  };
  
  #endif // TEST_H
  </code></pre>
  
  <p>Library: </p>
  
  <p>test_global.h:</p>
  
  <pre><code>#ifndef TEST_GLOBAL_H
  #define TEST_GLOBAL_H
  
  #include &lt;QtCore/qglobal.h&gt;
  
  #if defined(TEST_LIBRARY)
  #  define TESTSHARED_EXPORT Q_DECL_EXPORT
  #else
  #  define TESTSHARED_EXPORT Q_DECL_IMPORT
  #endif
  
  #endif // TEST_GLOBAL_H
  </code></pre>
  
  <p>test.cpp:</p>
  
  <pre><code>#include "test.h"
  
  
  Test::Test()
  {
  }
  </code></pre>
  
  <p>test.h:</p>
  
  <pre><code>#ifndef TEST_H
  #define TEST_H
  
  #include "test_global.h"
  
  class TESTSHARED_EXPORT Test
  {
  public:
      Test();
  };
  
  #endif // TEST_H
  </code></pre>
  
  <p>test.pro:</p>
  
  <pre><code>#-------------------------------------------------
  #
  # Project created by QtCreator 2013-04-22T15:31:04
  #
  #-------------------------------------------------
  
  QT       -= gui
  
  TARGET = test
  TEMPLATE = lib
  
  DEFINES += TEST_LIBRARY
  
  SOURCES += test.cpp
  
  HEADERS += test.h\
          test_global.h
  
  unix:!symbian {
      maemo5 {
          target.path = /opt/usr/lib
      } else {
          target.path = /usr/lib
      }
      INSTALLS += target
  }
  </code></pre>
  
  <p>Compile output:</p>
  
  <pre><code>13:49:12: Running steps for project loadTestLib...
  13:49:12: Configuration unchanged, skipping qmake step.
  13:49:12: Starting: "/usr/bin/make" -w
  make: Entering directory `/home/bonart/Workspace/test/loadTestLib-build-Desktop_Qt_5_0_1_GCC_64bit-_______'
  /home/bonart/Qt5.0.1/5.0.1/gcc_64/bin/qmake -spec linux-g++-64 CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ../loadTestLib/loadTestLib.pro
  make: Leaving directory `/home/bonart/Workspace/test/loadTestLib-build-Desktop_Qt_5_0_1_GCC_64bit-_______'
  make: Entering directory `/home/bonart/Workspace/test/loadTestLib-build-Desktop_Qt_5_0_1_GCC_64bit-_______'
  g++ -m64 -Wl,-rpath,/home/bonart/Qt5.0.1/5.0.1/gcc_64 -Wl,-rpath,/home/bonart/Qt5.0.1/5.0.1/gcc_64/lib -o loadTestLib main.o   -L./libs -L../libs/-ltest -L/home/bonart/Qt5.0.1/5.0.1/gcc_64/lib -lQt5Core -lpthread 
  main.o: In function `main':
  /home/bonart/Workspace/test/loadTestLib-build-Desktop_Qt_5_0_1_GCC_64bit-_______/../loadTestLib/main.cpp:7: undefined reference to `Test::Test()'
  make: Leaving directory `/home/bonart/Workspace/test/loadTestLib-build-Desktop_Qt_5_0_1_GCC_64bit-_______'
  collect2: ld returned 1 exit status
  make: *** [loadTestLib] Error 1
  13:49:12: The process "/usr/bin/make" exited with code 2.
  Error while building/deploying project loadTestLib (kit: Desktop Qt 5.0.1 GCC 64bit)
  When executing step 'Сборка'
  </code></pre>
  
  <p>$ nm -D for my library gives me:</p>
  
  <pre><code>w _Jv_RegisterClasses
                   U _Unwind_Resume
                   U _Z17qt_message_output9QtMsgTypeRK18QMessageLogContextRK7QString
                   U _ZN10QArrayData10deallocateEPS_mm
                   U _ZN11QTextStreamD1Ev
                   U _ZN11QTextStreamlsERK7QString
                   U _ZN11QTextStreamlsEc
  0000000000000bb0 T _ZN4TestC1Ev
  0000000000000bb0 T _ZN4TestC2Ev
  0000000000000d90 W _ZN6QDebugD1Ev
  0000000000000d90 W _ZN6QDebugD2Ev
                   U _ZN7QString15fromUtf8_helperEPKci
                   U _ZNK14QMessageLogger5debugEv
                   U _ZTISt9bad_alloc
                   U _ZdlPv
  0000000000202080 A __bss_start
                   U __cxa_begin_catch
                   U __cxa_end_catch
                   w __cxa_finalize
                   w __gmon_start__
                   U __gxx_personality_v0
  0000000000202080 A _edata
  0000000000202090 A _end
  0000000000000ec8 T _fini
  00000000000009e8 T _init
  </code></pre>