Building Boost Serializer library with Clang, no symbols exported

Hey guys,

I'm trying to compile Boost Serializer library using Clang on windows targeting mingw and I get a lot of warnings like this:

In file included from F:\boost_1_54_0\boost/serialization/base_object.hpp:39:
F:\boost_1_54_0\boost/serialization/void_cast_fwd.hpp:29:1: warning: dllexport attribute ignored [-Wignored-attributes]
BOOST_DLLEXPORT
^
F:\boost_1_54_0\boost/serialization/force_include.hpp:37:43: note: expanded from macro 'BOOST_DLLEXPORT'
# define BOOST_DLLEXPORT __declspec(dllexport)
                                           ^
<built-in>:158:38: note: expanded from here
#define __declspec(a) __attribute__((a))
                                      ^

And none of the symbols are actually being exported so when I try to link the resulting library I get a lot of symbol not found errors. Clang/LLVM was built with mingw and I'm pointing bjam to the mingw STL headers. Here are the full build logs for building the static and dynamic versions of the library.
https://dl.dropboxusercontent.com/u/1735585/buildlogstatic.txt
https://dl.dropboxusercontent.com/u/1735585/buildlogdynamic.txt

Bjam is calling clang like this:

clang-linux.compile.c++.without-pth bin.v2\libs\serialization\build\clang-linux-3.4\debug\link-static\threading-multi\binary_iarchive.obj
clang version 3.4 (trunk)
Target: i686-pc-mingw32
Thread model: posix
Selected GCC installation:
  "F:\LLVM-fresh\release\Release+Asserts\bin\clang++.exe" -cc1 -triple i686-pc-mingw32 -S -disable-free -main-file-name binary_iarchive.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -mconstructor-aliases -target-cpu pentium4 -target-linker-version 2.23.2 -v -v -g -coverage-file "C:\\Users\\Kim\\AppData\\Local\\Temp\\binary_iarchive-e303b0.s" -nostdsysteminc -nobuiltininc -resource-dir "F:\\LLVM-fresh\\release\\Release+Asserts\\bin\\..\\lib\\clang\\3.4" -D BOOST_ALL_NO_LIB=1 -I "F:\\\\boost_1_54_0" -I "C:\\MinGW\\mingw32\\include" -I "C:\\MinGW\\lib\\gcc\\mingw32\\4.8.1\\include\\c++\\mingw32" -I "C:\\\\mingw\\\\lib\\\\gcc\\\\mingw32\\\\4.8.1\\\\include" -I "C:\\\\MinGW\\\\lib\\\\gcc\\\\mingw32\\\\4.8.1\\\\include\\\\c++\\\\mingw32" -I "C:\\\\MinGW\\\\lib\\\\gcc\\\\mingw32\\\\4.8.1\\\\include\\\\c++" -I "C:\\\\MinGW\\\\lib\\\\gcc\\\\mingw32\\\\4.8.1\\\\include\\\\c++\\\\tr1" -I . -O0 -Wall -std=c++11 -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir "F:\\boost_1_54_0" -ferror-limit 19 -fmessage-length 0 -mstackrealign -fno-use-cxa-atexit -fno-inline -fobjc-runtime=gcc -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -vectorize-slp -o "C:\\Users\\Kim\\AppData\\Local\\Temp\\binary_iarchive-e303b0.s" -x c++ "libs\\serialization\\src\\binary_iarchive.cpp"
clang -cc1 version 3.4 based upon LLVM 3.4svn default target i686-pc-mingw32
ignoring duplicate directory "C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32"
ignoring duplicate directory "F:\boost_1_54_0"
#include "..." search starts here:
#include <...> search starts here:
  F:\boost_1_54_0
  C:\MinGW\mingw32\include
  C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32
  C:\\mingw\\lib\\gcc\\mingw32\\4.8.1\\include
  C:\\MinGW\\lib\\gcc\\mingw32\\4.8.1\\include\\c++
  C:\\MinGW\\lib\\gcc\\mingw32\\4.8.1\\include\\c++\\tr1
End of search list.
In file included from libs\serialization\src\binary_iarchive.cpp:14:
In file included from F:\boost_1_54_0\boost/archive/binary_iarchive.hpp:20:
In file included from F:\boost_1_54_0\boost/archive/binary_iarchive_impl.hpp:21:
In file included from F:\boost_1_54_0\boost/archive/basic_binary_iprimitive.hpp:56:
In file included from F:\boost_1_54_0\boost/serialization/array.hpp:19:
In file included from F:\boost_1_54_0\boost/serialization/nvp.hpp:34:
In file included from F:\boost_1_54_0\boost/serialization/base_object.hpp:39:
F:\boost_1_54_0\boost/serialization/void_cast_fwd.hpp:29:1: warning: dllexport attribute ignored [-Wignored-attributes]
BOOST_DLLEXPORT
^
F:\boost_1_54_0\boost/serialization/force_include.hpp:37:43: note: expanded from macro 'BOOST_DLLEXPORT'
# define BOOST_DLLEXPORT __declspec(dllexport)
                                           ^
<built-in>:158:38: note: expanded from here
#define __declspec(a) __attribute__((a))
                                      ^
In file included from libs\serialization\src\binary_iarchive.cpp:14:
In file included from F:\boost_1_54_0\boost/archive/binary_iarchive.hpp:20:
In file included from F:\boost_1_54_0\boost/archive/binary_iarchive_impl.hpp:22:
In file included from F:\boost_1_54_0\boost/archive/basic_binary_iarchive.hpp:31:
In file included from F:\boost_1_54_0\boost/archive/detail/common_iarchive.hpp:23:
In file included from F:\boost_1_54_0\boost/archive/detail/interface_iarchive.hpp:22:
In file included from F:\boost_1_54_0\boost/archive/detail/iserializer.hpp:79:
F:\boost_1_54_0\boost/serialization/void_cast.hpp:265:1: warning: dllexport attribute ignored [-Wignored-attributes]
BOOST_DLLEXPORT
^
F:\boost_1_54_0\boost/serialization/force_include.hpp:37:43: note: expanded from macro 'BOOST_DLLEXPORT'
# define BOOST_DLLEXPORT __declspec(dllexport)
                                           ^
<built-in>:158:38: note: expanded from here
#define __declspec(a) __attribute__((a))

I hope someone can tell me why this is happening and how it can be fixed. Thanks a lot for your time.

Hello

Unfortunately, dll* stuff for classes is still WIP in clang. So,
compile the stuff as static libraries...

Clang currently ignores dllexport/dllimport on inline functions. It may work if you both compile and consume the library with Clang as then the functions are never exported and imported.

-Nico