[CMake] Win32 linker line problems...
David Cole
david.cole at kitware.com
Tue Apr 19 16:50:45 EDT 2005
Are you getting linker warning LNK4098? If so, read over this page on
MSDN; it's by far the most illuminating data I've ever run across about
libs and the /M* compiler flags. You have to set up the nodefaultlib
flags to ignore *all other 5 runtime libs* that you don't want to
completely eliminate this warning.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/LNK4098.asp
Are there any 3rd party libs that you are linking in binary form that
might have a conflicting need for a different runtime lib than what you
are specifying?
HTH,
David
Lars Pechan wrote:
> Hi Bill,
> I have already set the compiler flags to use MTd and it doesn't help.
>
> There is a particular directory in the tree containing about 100 cpp
> files that have functions from LIBCMT.LIB copied into the individual
> object files. I've been trying to understand why but I'm afraid I've
> drawn a blank. I thought it might be a dodgy '#pragma' or a
> particlular MS header or something but I haven't been able to find
> anything. There some info from MS about this happening when using MFC
> but MFC isn't even used in that directory. Everywhere else the C and
> C++ files compile fine. (The same compiler flags are used practically
> everywhere.)
>
> If there are any MS Linker gurus on the list I'd be most grateful for
> a pointer. (operator new is listed as a COMDAT in the object files).
>
> Thanks anyway,
>
> /Lars
>
> On 20/04/2005, at 5:50 AM, William A. Hoffman wrote:
>
>> Actually, I think if you made the correct changes to CMAKE_C_FLAGS,
>> CMAKE_C_FLAGS_[DEBUG...]
>> and to CMAKE_CXX flags, it should work. See
>> Modules/Platforms/Windows-cl.cmake.
>>
>>
>> If you change these flags:
>>
>> SET (CMAKE_CXX_FLAGS_INIT "/W3 /Zm1000 /EHsc /GR")
>> SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/MDd /Zi /Od /RTC1")
>> SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1 /D NDEBUG")
>> SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /O2 /D NDEBUG")
>> SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /D NDEBUG")
>> SET (CMAKE_C_FLAGS_INIT "/W3 /Zm1000")
>> SET (CMAKE_C_FLAGS_DEBUG_INIT "/MDd /Zi /Od /GZ")
>> SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MD /O1 /D NDEBUG")
>> SET (CMAKE_C_FLAGS_RELEASE_INIT "/MD /O2 /D NDEBUG")
>> SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /D NDEBUG")
>>
>> To all use /MTd, then you will not need to mess with the linker options.
>>
>> -Bill
>>
>>
>> At 02:13 AM 4/19/2005, Lars Pechan wrote:
>>
>>> Hello,
>>> I use CMake in a project where I build lots of static libs that are
>>> later linked together to an app. In order to check this app for
>>> leaks I use VisualLeakDetector
>>> (http://www.codeproject.com/useritems/visualleakdetector.asp) which
>>> requires the app to be compiled with /MTd. This causes some problems
>>> in a few places and I end up with multiply defined stuff from the C
>>> runtime libs so I set up
>>>
>>> CMAKE_EXE_LINKER_FLAGS_DEBUG
>>> CMAKE_MODULE_LINKER_FLAGS_DEBUG
>>> CMAKE_SHARED_LINKER_FLAGS_DEBUG
>>>
>>> to all be "/debug /NODEFAULTLIB:LIBCMT.LIB /FORCE:MULTIPLE".
>>>
>>> This works fine when using the NMake Makefiles generator.
>>> Unfortunately, when using the "Visual Studio 7.NET 2003" generator
>>> these settings seem to be ignored. In Visual Studio I can't see my
>>> flags having any effect at all when I look in the linker properties.
>>> Not sure why but I was under the impression that these flags should
>>> just be added to the linker command line options?
>>>
>>> I set the variables in a cache file that loads when the
>>> build-directory is generated. I can see the vars from CMakeSetup.
>>>
>>> I've seen the same behaviour on CMake 2.0.6, CMakeCVS-20050330 and
>>> CMakeCVS-20050415.
>>>
>>> Thanks for your help.
>>>
>>> /Lars
>>>
>>>
>>> _______________________________________________
>>> CMake mailing list
>>> CMake at cmake.org
>>> http://www.cmake.org/mailman/listinfo/cmake
>>
>>
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>
More information about the CMake
mailing list