c++ template instanciation and dlls on win32
Danny Smith
dannysmith@clear.net.nz
Sun Jul 1 10:31:00 GMT 2007
c++ template instanciation and dlls on win32
* From: Mathieu Lacage <Mathieu dot Lacage at sophia dot inria dot
fr>
* To: gcc-help at gcc dot gnu dot org
* Date: Sat, 30 Jun 2007 19:30:45 +0200
* Subject: c++ template instanciation and dlls on win32
> Here is my sample code:
> http://www-sop.inria.fr/dream/personnel/Mathieu.Lacage/tmp.tar.gz
This is what I would do:
Exolicitly, force instantiation of your template instance in dll:
diff -c3p tmp/test.cc tmp0/test.cc
*** tmp/test.cc Sat Jun 30 21:30:22 2007
--- tmp0/test.cc Sun Jul 1 15:49:20 2007
***************
*** 1,5 ****
--- 1,8 ----
#include "test.h"
+ // instantiate
+ template class Test <0>;
+
void Function (void)
{
Test<0>::Exec ();
Explictly mark the reference to your imported instantation as imported.
*** tmp/main.cc Sat Jun 30 21:30:14 2007
--- tmp0/main.cc Sun Jul 1 15:54:16 2007
***************
*** 1,5 ****
--- 1,8 ----
#include "test.h"
+ // Import rather than instantiate
+ extern template class __declspec (dllimport) Test <0>;
+
void Function (void);
int main (int argc, char *argv[])
In addition, on windows the ".so" extension is unusual. The linker will
have less difficulty if you
use the windows ".dll" extension
*** tmp/Makefile Sat Jun 30 21:33:00 2007
--- tmp0/Makefile Sun Jul 1 15:42:45 2007
***************
*** 1,7 ****
! all: libtest.so main
! libtest.so: test.o
g++ -shared -o $@ $^
main: main.o
! g++ -L. -ltest -o $@ $^
--- 1,7 ----
! all: libtest.dll main
! libtest.dll: test.o
g++ -shared -o $@ $^
main: main.o
! g++ -L. -ltest -o $@ $^
More information about the Gcc-help
mailing list