[CMake] /NODEFAULTLIB:library errors (Solved)

Mike Jackson imikejackson at gmail.com
Thu May 31 22:57:01 EDT 2007


Well I seem to have a typo in my original CMakeLists.txt file which  
was causing part of the problem and I did not fully understand what  
the other problems were.. but now I have a better idea which I am  
going to elaborate on a bit just in case someone else googles for the  
same problem.

There were 3 problems:

1: The /NODEFAULTLIB problem. What was happening was that between the  
previous libraries that I had compiled (HDF5) and my new libraries  
and my Application and Qt there was a mismatch between the type of C/C 
++ runtime used for each. One of them had a "Single Threaded" runtime  
where the others were compiled against the "Multi-Threaded" runtime.  
Once I checked each project to make sure each project had the same  
settings, then I no longer needed this setting.

2:MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external  
symbol _WinMain at 16 referenced in function _WinMainCRTStartup. This is  
caused because if you are building a "Windows" application versus a  
"console" application you need to have this function (_WinMain() ).  
Qt provides this for Windows in the "qtmain" library. So adding a  
line like the following to your CMakeLists.txt file should alleviate  
the problem.
         SET (${QT_LIBRARIES} qtmain ${QT_LIBRARIES})
And the secret to make this work is to _actually_ include the $ 
{QT_LIBRARIES} in your TARGET_LINK_LIBRARIES command ( which I  
finally noticed that I was NOT doing.. oops).

3: My third problem was more with HDF5 in a Dynamic Library. I needed  
to have the following:
    	ADD_DEFINITIONS(-DHDF5_MODULES_ON)
     	ADD_DEFINITIONS("-D_HDF5USEDLL_")
in my CMakeLists.txt file. This is used in a sub project that the  
main project includes through the ADD_SUBDIRECTORY(...) command so I  
_assumed_ it would get added to the parent project. This was not a  
valid assumption. Adding those lines to the parent project (which  
also links against HDF5.lib) was needed.

After all of the above was figured out I was finally able to compile  
and run my Qt based application. I am writing all this in the hopes  
that it will help some one else out in the future.

-- 
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On May 31, 2007, at 9:32 PM, Won-Ki Jeong wrote:

> Try add the following in CMakeLists.txt
>
>  SET( CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
> "/NODEFAULTLIBS:LIBCMT" )
>  SET( CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
> "/NODEFAULTLIBS:MSVCRT" )
>  SET( CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
> "/NODEFAULTLIBS:MSVCPRTD" )
>
> On 5/31/07, Mike Jackson <imikejackson at gmail.com> wrote:
>> I am trying to compile my Qt based application by using CMake to
>> generate VS2003 projects. The project compiles but dies at the link
>> stage with lots of errors. It seems I have been down this path before
>> but the last solution I had does not seem to work any more.
>>
>> The errors are:
>>
>> LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of
>> other libs; use /NODEFAULTLIB:library
>> LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of
>> other libs; use /NODEFAULTLIB:library
>>
>> For this I have in my CMakeLists.txt file:
>>
>> IF(WIN32)
>>  SET(GUI_TYPE WIN32)
>>  ADD_DEFINITIONS(-DNODEFAULTLIB:library)
>>  SET (${QT_LIBRARIES} qtmain ${QT_LIBRARIES})
>> ENDIF(WIN32)
>>
>> for which I thought used to work (Maybe a different verison of VS?
>> Could some one set me straight on this error, what to put into my
>> CMakeLists.txt file to get rid of it.
>>
>> The Other error is:
>> MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol
>> _WinMain at 16 referenced in function _WinMainCRTStartup
>>
>> which I know I have seen before, and again thought I had a solution
>> for but now I am not so sure. I thought the following in a
>> CMakeLists.txt file would work (as it did in the past).
>>
>> SET (${QT_LIBRARIES} qtmain ${QT_LIBRARIES}). This does not seem to
>> work any more.
>>
>> I would be eternally grateful if someone could shed some light on  
>> the above.
>>
>> System Info: Windows XP, VS 2003 .Net (with latest service pack),  
>> CMake 2.4.6
>>
>> I am usually a OS X/Linux guy so this is all a bit new.
>>
>> Thanks
>> --
>> Mike Jackson
>> imikejackson _at_ gee-mail dot com
>> _______________________________________________
>> CMake mailing list
>> CMake at cmake.org
>> http://www.cmake.org/mailman/listinfo/cmake
>>



More information about the CMake mailing list