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