Results 1 to 7 of 7

Thread: help getting started (on Linux)

  1. #1
    Junior Member
    Join Date
    Jul 2006
    Posts
    3

    help getting started (on Linux)

    I apologize if this is not the best place for this, but I could use some help getting started. I've created a super-simple test program and cannot link.

    Here's what I did:
    1. dowloaded the latest DOM (patch 3) and docs zip files from SourceForge.
    2. unzipped, changed directory to COLLADA_DOM.
    3. make - this built with no errors
    4. copied libraries in lib-dbg (*.a) to the directory of my test program.
    5. attempted to build test program with collada libraries...
    Result: undefined reference to `DAE:AE()'

    Here's my program: collada_test.cpp
    *********************************************
    #include <stdio.h>
    #include "dae.h" // Collada API includes
    #include "dom/domCOLLADA.h"

    int main(int argc, char *argv[])
    {
    int ret;

    // Instantiate the DAE object for the input file
    DAE *input = new DAE;

    // Load the COLLADA file
    ret = input->load(argv[1]);
    if (ret != DAE_OK)
    {
    fprintf(stderr, "load failed\n");
    exit(-1);
    }

    return 0;
    }
    *********************************************

    Here's my build command with verbose output:
    *********************************************
    > g++ -v -Wall -I../COLLADA_DOM/include/ -I../COLLADA_DOM/include/1.4/ ./*.a collada_test.cpp
    Using built-in specs.
    Target: i486-linux-gnu
    Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu
    Thread model: posix
    gcc version 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)
    /usr/lib/gcc/i486-linux-gnu/4.0.4/cc1plus -quiet -v -I../COLLADA_DOM/include/ -I../COLLADA_DOM/include/1.4/ -D_GNU_SOURCE collada_test.cpp -quiet -dumpbase collada_test.cpp -mtune=i686 -auxbase collada_test -Wall -version -o /tmp/ccusHzSR.s
    ignoring nonexistent directory "/usr/local/include/i486-linux-gnu"
    ignoring nonexistent directory "/usr/include/i486-linux-gnu"
    #include "..." search starts here:
    #include <...> search starts here:
    ../COLLADA_DOM/include/
    ../COLLADA_DOM/include/1.4/
    /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4
    /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/i486-linux-gnu
    /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/backward
    /usr/local/include
    /usr/lib/gcc/i486-linux-gnu/4.0.4/include
    /usr/include
    End of search list.
    GNU C++ version 4.0.4 20060507 (prerelease) (Debian 4.0.3-3) (i486-linux-gnu)
    compiled by GNU C version 4.0.4 20060507 (prerelease) (Debian 4.0.3-3).
    GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32093
    as -V -Qy --32 -o /tmp/cczilXZO.o /tmp/ccusHzSR.s
    GNU assembler version 2.16.91 (i486-linux-gnu) using BFD version 2.16.91 20060413 Debian GNU/Linux
    /usr/lib/gcc/i486-linux-gnu/4.0.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.0.4/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.0.4 -L/usr/lib/gcc/i486-linux-gnu/4.0.4 -L/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../lib -L/usr/lib/gcc/i486-linux-gnu/4.0.4/../../.. -L/lib/../lib -L/usr/lib/../lib ./libcollada_dae.a ./libcollada_dom.a ./libcollada_LIBXMLPlugin.a ./libcollada_stdErrPlugin.a ./libcollada_STLDatabase.a /tmp/cczilXZO.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i486-linux-gnu/4.0.4/crtend.o /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../lib/crtn.o
    /tmp/cczilXZO.o: In function `main':
    collada_test.cpp.text+0x33): undefined reference to `DAE:AE()'
    collect2: ld returned 1 exit status
    *********************************************

    Am I doing something silly? How can the collada libs be built and linked and not define DAE?

  2. #2
    Senior Member
    Join Date
    Jan 2006
    Location
    Foster City, CA
    Posts
    540
    I'm rusty with my g++ knowledge, but don't you need -l to actually link in a library?

  3. #3
    Junior Member
    Join Date
    Jul 2006
    Posts
    3

    help getting started (on Linux)

    Quote Originally Posted by sthomas
    I'm rusty with my g++ knowledge, but don't you need -l to actually link in a library?
    No. Using -l is a standard way to do it because it automatically searches linker environment paths. Using this build command instead...

    g++ -v -Wall -I../COLLADA_DOM/include/ -I../COLLADA_DOM/include/1.4/ -L. -lcollada_dae -lcollada_dom -lcollada_LIBXMLPlugin -lcollada_stdErrPlugin -lcollada_STLDatabase collada_test.cpp

    ...I get the same result: undefined reference to `DAE:AE()'.

    In the verbose printout you can see that the collect2 (link) command is getting the collada libs.
    Surely someone out there is using COLLADA_DOM on Linux with GCC?

  4. #4
    Senior Member
    Join Date
    Jan 2006
    Location
    Foster City, CA
    Posts
    540
    Another thing to try: specify the libraries after the source files that depend on them.

  5. #5
    Junior Member
    Join Date
    Jul 2006
    Posts
    3

    help getting started (on Linux)

    Quote Originally Posted by sthomas
    Another thing to try: specify the libraries after the source files that depend on them.
    That did it. I don't know why I didn't know that, but thanks! I can build now.

  6. #6
    Senior Member
    Join Date
    Jan 2006
    Location
    Foster City, CA
    Posts
    540
    That's just how gcc/g++ work apparently. See this for example: "The last point has to do with the fact that gcc processes the files listed on the command line in sequence and will only resolve references to libraries if they are given after the file that makes the reference."

  7. #7
    Senior Member
    Join Date
    Aug 2004
    Location
    California
    Posts
    771
    Search order prerequisites are needed with static linking . People are forgetting that since dynamic linking is so prevalent.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •