Alan W. Irwin wrote:

> Hi Robert:
>
> Thanks for your report for revision 8861, the latest svn trunk version
> of PLplot.
>
> Arjen, I have a question for you below.
>
> On 2008-10-07 17:40+0200 Robert Pollak wrote:
>
>
> [...]
>
>> cmake -G "NMake Makefiles" ^
>>       -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
>>       -DCMAKE_INSTALL_PREFIX=install ^
>>       -DBUILD_SHARED_LIBS=OFF ^
>>       -DCMAKE_VERBOSE_MAKEFILE=ON ^
>>       -DBUILD_TEST=ON ^
>
>                         ..
> [...]
>
>> This runs up to the following compile error:
>
>
>> cl   /DWIN32 /D_WINDOWS /W3 /Zm1000 /D_DEBUG /MDd /Zi  /Ob0 /Od /RTC1
>> -ID:\project\PLPlot\include -ID:\project\PLPlot\build-vc9-static-Debug
>> -ID:\project\PLPlot\build-vc9-static-Debug\include -DHAVE_CONFIG_H
>> -D_CRT_SECURE_NO_DEPRECATE /FoCMakeFiles\plplotd.dir\__\drivers\hpgl.obj
>> /FdD:\project\PLPlot\build-vc9-static-Debug\src\plplotd.pdb -c
>> D:\project\PLPlot\drivers\hpgl.c
>>
>> [...]hpgl.c
>> D:\project\PLPlot\drivers\hpgl.c(141) : error C2375:
>> 'plD_dispatch_init_hp7470': redefinition; different linkage
>>        D:\project\PLPlot\include\drivers.h(73) : see declaration of
>> 'plD_dispatch_init_hp7470'
>>
>>
>> When I switch off one affected driver after the other (as with
>> -DPLD_hp7470=OFF), I see the error appearing in a lot of drivers.
>
>
> Arjen, you are the PLplot expert in this area so this question is
> directed to you:
>
> The two lines in question are
>
> drivers/hpgl.c, line 140
>
> PLDLLEXPORT void plD_dispatch_init_hp7470( PLDispatchTable *pdt )
>
> and
>
> include/drivers.h, line 73
>
> PLDLLIMPEXP void plD_dispatch_init_hp7470       ( PLDispatchTable *pdt );
>
> So I believe this user found a combination of flags that set PLDLLIMPEXP
> different from PLDLLEXPORT.
>
> The relevant logic is in include/pldll.h
>
> #if defined(MAKINGPLDLL)
>   #define PLDLLIMPEXP PLDLLEXPORT
>   #define PLDLLIMPEXP_DATA(type) PLDLLEXPORT type
> #elif defined(USINGPLDLL)
>   #define PLDLLIMPEXP PLDLLIMPORT
>   #define PLDLLIMPEXP_DATA(type) PLDLLIMPORT type
> #else
>   #define PLDLLIMPEXP
>   #define PLDLLIMPEXP_DATA(type) type
> #endif
>
> I think the key to this issue is this user specified the cmake option
> -DBUILD_SHARED_LIBS=OFF which means MAKINGPLDLL is not defined, in which
> case PLDLLIMPEXP is defined to nothing, but PLDLLEXPORT is still defined
> to something (by the Windows stanzas earlier in include/pldll.h).
>
> Robert, what happens if you add
>
>     #define PLDLLEXPORT
>     #define PLDLLIMPORT
>
> to the #else stanza above?  I predict that will fix your problem with
> the -DBUILD_SHARED_LIBS=OFF case.
>
> Arjen, if you agree that is no-brainer fix, please make the commit.  
> (I feel
> intimidated from doing that myself because I have no access to windows
> boxes to even make a superficial test of the change.)

Hi Alan, Robert,

that would indeed seem to be the right thing to do. Mind you, the 
static-library
option (BUILD_SHARED_LIBS=OFF) is a not too well tested configuration
option. You may run into other problems later on, but at least this one 
should
work.

I will make the commit asap, if Robert can confirm that this indeed 
works and
there are no further glitches down the line. Otherwise I will have to 
investigate ;).

Regards,

Arjen



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to