Am 19.01.2012 um 14:18 schrieb erick oliveira da silva <eosilva2...@ig.com.br>:

> Hi Till,
> 
> 
> Depending on your code it *might* be necessary (and hence correct behaviour) 
> to export the /entire/ class!
> 
> In my case, I unfortunatelly really need to export functions, not classes. 
> And the same program works in Linux with gcc.

First off, the fact that it works with gcc on Linux doesn't give us any 
confirmation whether your code/build instructions/compiler switches are correct 
on Windows! Why? Because that "__declspec(dll_export/import)" stuff is very 
Windows-specific and has no effect on any other platform with regards to 
whether a given symbol is exported from a DLL, or in other words: by default 
(*) on Linux (and any other platform that I know of) ALL symbols are exported 
from a given .so/.dynlib shared library - only on Windows you have to 
explicitly tell which symbols to export. 

(Side-note: there is another, I think older mechanism besides the "__declspec" 
approach: to provide an explicit "export table" (*.def ?). Refer to the MSDN 
documentation. But I prefer the __declspec approach, as it is "closer tied with 
the actual code", IMHO easier to maintain.)

So the fact that something works on any other platform than Windows with 
regards to linking doesn't assure you that you are doing it right on Windows ;)


So we can limit the discussion on the MS compiler/build environment vs gcc on 
MinGW (and since that's also building DLLs the same "Windows DLL rules" apply 
here).


That said, I understand you have something like:

// FooLib.h

// The macro being defined properly
FOOLIB_EXPORT void myFunction();

// FooLib.cpp

#include <QtCore/QString>
#include "FooLib.h"

void myFunction() {
  QString msg = "Hello";
  qDebug(qPrintable(msg));
}

and you link that with a static build of Qt 4.7.4 (did you compile it yourself? 
Or is that provided from Nokia/
"Digia"?), which works with MSVC, but fails on gcc/MinGW. Is that about right?

btw: do you use the same *.pro/qmake/nmake build approach with MSVC, or do you 
setup your project "from scratch" within Visual Studio (with the help of the 
"Qt AddOn" - or whatever it is called these days)?


So as Andreas already pointed out at this point it might be helpful to see the 
actual (example) code and *.pro files which reproduces the problem. 


Cheers, Oliver

(*) "By default" meaning "the compiler switches you get with the proper 
QMAKESPEC and qmake approach" - IIRC you can also have gcc (or was it the 
native compiler on AIX?) explicitly export given symbols and have everythink 
else "hidden" (not exported - reducing the file size by a couple of Bytes and 
possibly speeds up dynamic linking by a couple of %-fractions). But this again 
would become compiler/platform-specific, just as this __declspec stuff on 
Windows. So for the sake of simplicity of this discussion let's just say 
"everything is exported on any platform other than Windows".
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to