Hi, I'm really excited to use APR, but I'm having trouble getting my "Hello
World" application to work with static linkage, on both Linux and Win32.

Basically, I have a single-file application:

# // Main.cpp
# #include <iostream>
# #include "apr.h"
# #include "apr_general.h"
#
# using namespace std;
#
# // main
# int main( int argc, char const* const* argv )
# {
#       cout << "Hello world!";
#
#       // Start APR
#       apr_app_initialize( &argc, &argv, 0 );
#
#       unsigned char buf[10];
#       apr_generate_random_bytes( buf, 10 );
#
#       // Done
#       apr_terminate( );
#       return 0;
# }

I can successfully compile, link, and execute the file on Win32 with APR
1.0.0 when linking with the dynamic library:

# $APRBASE\Debug\libapr-1.lib
# $APRBASE\Debug\libapr-1.dll

However, if I try to link with the static library on Win32:

# $APRBASE\libd\apr-1.lib

I get the following linker errors:

# Linking...
# main.obj : error LNK2019: unresolved external symbol __imp__apr_terminate
referenced in function _main
# main.obj : error LNK2019: unresolved external symbol
[EMAIL PROTECTED] referenced in function _main
# main.obj : error LNK2019: unresolved external symbol
[EMAIL PROTECTED] referenced in function _main
# Debug/APRtest.exe : fatal error LNK1120: 3 unresolved externals

Likewise, I can compile and link on Linux (Fedora Core 2) using the shared
library using the following Ant build file:

# <project name="aprtest" default="compile">
#       <target name="compile">
#               <exec executable="g++">
#                       <arg value="-oaprtest"/>
#                       <arg value="-I./unixlibs/apr-1/include/apr-1"/>
#                       <arg value="-L./unixlibs/apr-1/lib"/>
#                       <arg value="-lapr-1"/>
#                       <arg value="-shared"/>
#                       <arg file="main.cpp"/>
#               </exec>
#       </target>
# </project>

But if I change line 8 from "-shared" to "-static", I get the following
linker errors:

# compile:
#      [exec] /tmp/ccNWTzJF.o(.text+0x33): In function `main':
#      [exec] : undefined reference to `apr_app_initialize'
#      [exec] /tmp/ccNWTzJF.o(.text+0x44): In function `main':
#      [exec] : undefined reference to `apr_generate_random_bytes'
#      [exec] /tmp/ccNWTzJF.o(.text+0x4c): In function `main':
#      [exec] : undefined reference to `apr_terminate'
#      [exec] collect2: ld returned 1 exit status

So, I'm seeing the exact same problem on both platforms.  Obviously I'm
doing something wrong, and I'm hoping it's something simple.  Does anyone
see what I should do differently to get static linkage to work?

-david

Reply via email to