Arjen Markus <[EMAIL PROTECTED]> writes:

> Jim Dishaw wrote:
>
> we will apply the patch asap, but could you explain a bit about the various
> versions of the libraries you are able to build with the change in compiler
> options? (Intel Fortran is relatively new to me - at work we are switching
> to this compiler, but it comes with a bunch of new/different options and
> a different IDE than the old and more familiar Compaq Visual Fortran
> compiler and at the moment I have little experience with IVF).
>

The various libraries that one can link with is not just an Intel
Fortran feature--Visual Studio does it also.  There are six libraries
that you can link with

Name         VC++   IF                     Description
MSVCRT.LIB   /MD    /libs:dll /threads     DLL library, thread-safe
LIBC.LIB     /ML    /libs:static           Static library, non-thread safe
LIBCMT.LIB   /MT    /libs:static /threads  Static library, thread safe

and the debug versions
MSVCRTD.LIB  /MDd   /libs:dll /threads /dbglibs
LIBCD.LIB    /MLd   /libs:static /dbglibs
LIBCMTD.LIB  /MTd   /libs:static /threads /dbglibs

Intel Fortran permits just "/libs:dll," which they describe as
"single-threaded dynamic library" that links with MSCVRT.LIB and the
single-threaded fortran library.  The switches also have other impacts
in automatically defining some constants

VC++    Defines
/MD     _MT _DLL
/ML     
/MT     _MT
/MDd    _DEBUG _MT _DLL
/MLd    _DEBUG
/MTd    _DEBUG _MT

If the various components do not have a consistent library type, then
you will get errors in the link phase because of name collision.  For
example, I am not able to build the examples in Plplot when building a
static thread safe version of Plplot because I cannot figure out how to
override the compiler flags.

Of course, one probably does not want to build six different versions of
their library.  If you specify the VC++ /Zl compiler option, the
compiler will omit the default library name from the object file.
Unless there is a good reason not to (for example you know, or are
uncertain, that your code is not thread safe you may want to force
linking with the LIBC.LIB library), libraries should be created with
object files that have the /Zl option specified at compile time.

I think, for Plplot, we should provide a simply way of specifying the
runtime library, with a default setting of "/MD" (and "/MDd" for the
debug version) so as not to break applications.  If one wants to build a
generic library, then the "/Zl" option could be added at the cmake
command line.

The Intel Fortran is actually an updated version of the Compaq Visual
Fortran.  Intel bought it from HP/Compaq and got the developers--many of
who were with developing it when it was Digital Fortran.  I found the
transition to be mostly painless.  The only problem I had was when I
migrated a CVF project.  The migration process sets the /iface:cvf
compiler option (I don't know if this is the current behavior), which
specifies the calling convention in the Intel compiler.  CVF uses a
different convention than the default, which will cause link errors if
you mix CVF and projects using the default.




-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to