[CMake] How to link shared lib on windows (visual studio 2014).

Chaos Zhang zcsd2012 at gmail.com
Tue Apr 26 09:22:19 EDT 2016


Hi, all,

Thanks for your sincerely help, and i understand it clearly now. ( ^_^ )

Best regards,
Chao


J. Caleb Wherry wrote
> (Shameless plug ahead)
> 
> If you want to see a working example of what I said above, you can check
> out my ExampleCMakeProject:
> 
> https://github.com/calebwherry/example-cmake-project
> 
> It is currently being built and tested on TravisCI (Linux + Mac [GGC5 and
> Clang3.7]) and Appveyor (Windows [VS2015]) and provides a simple example
> of
> how to write/structure CMake for cross-platform C/C++ projects. You can
> ignore the python wrapper if you want, it just makes working with the
> CMake
> exe and system builds easier (calculates core counts, creates directories
> for build, nicer CLI options, etc) since I find the options to CMake to be
> very... verbose.
> 
> The POST_BUILD example is here:
> 
> https://github.com/calebwherry/example-cmake-project/blob/master/src/app/test-app/CMakeLists.txt
> 
> If you really are looking to get a one-off project working, Decker's
> recommendation about PATH modification is easiest. It's just not something
> I think is viable in the long run and doesn't work as an actual solution
> to
> the problem if you are trying to solve it for many projects.
> 
> -Caleb
> 
> On Mon, Apr 25, 2016 at 9:01 PM, Chaos Zhang <

> zcsd2012@

> > wrote:
> 
>> Hi,
>>
>> I faced this problem when i try built a shared lib  and linked it on
>> windows. The structure of my project as below:
>> -test_dir/
>>      -sub_hello/
>>            CMakeLists.txt
>>            hello.c
>>      -top/
>>            main.c
>>            CMakeLists.txt
>>      CMakeLists.txt
>>
>> The content of each file:
>> ①test_dir/CMakeLists.txt:
>> PROJECT(TESTLIB)
>> add_subdirectory(sub_hello sub_hello)
>> add_subdirectory(top top)
>>
>> ②test_dir/sub_hello/CMakeLists.txt:
>> message("message from sub_hello")
>> add_library(hello_lib  SHARED hello.c)
>>
>> ③test_dir/top/CMakeLists.txt:
>> include_directories(../sub_hello)
>> add_executable(main main.c)
>> target_link_libraries(main hello_lib)
>>
>> ④test_dir/sub_hello/hello.c:
>> #include 
> <stdio.h>
>> void HelloFunc()
>> {
>>         printf("###hello###\n");
>> }
>>
>> ⑤test_dir/top/main.c:
>> int main()
>> {
>>         HelloFunc();
>>         return 0;
>> }
>>
>> After i cmake this project, generated .sln and .proj files, then i built
>> it
>> and i get an error in vs:
>>
>> Error   LNK1104 can't open file "..\sub_hello\Debug\hello_lib.lib"
>>
>> In folder ..\sub_hello\Debug\ , there was not a hello_lib.lib existed.
>> Then i look thorough and found a solution:
>>
>> Add "set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS YES)" in file
>> test_dir/sub_hello/hello.c
>>
>> Then i built this solution again, this time it success, and hello_lib.lib
>> and main.exe was generated. But when i try to run main.exe, an error
>> occured: "lose hello_lib.dll". And i moved hello_lib.dll into the folder
>> of
>> main.exe, and it worked well.
>>
>> There are two questions i could not figure out:
>> ①Is this "..\sub_hello\Debug\hello_lib.lib" associates with
>> "..\sub_hello\Debug\hello_lib.dll"? For windows can not use .dll
>> directly,
>> and use a .lib to record the .dll's  entrance and location.
>> ②How to solve the problem of main.exe can not find .dll file.
>>
>> Best regards,
>> Chao Zhang
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://cmake.3232098.n2.nabble.com/How-to-link-shared-lib-on-windows-visual-studio-2014-tp7593346.html
>> Sent from the CMake mailing list archive at Nabble.com.
>> --
>>
>> Powered by www.kitware.com
>>
>> Please keep messages on-topic and check the CMake FAQ at:
>> http://www.cmake.org/Wiki/CMake_FAQ
>>
>> Kitware offers various services to support the CMake community. For more
>> information on each offering, please visit:
>>
>> CMake Support: http://cmake.org/cmake/help/support.html
>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/cmake
> 
> 
> 
> 
> -- 
> J. Caleb Wherry
> *Scientific Software Engineer*
> 
> <http://www.calebwherry.com>
> http://www.calebwherry.com
> +1 (615) 708-5651

> calebwherry@

> 
> -- 
> 
> Powered by www.kitware.com
> 
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> 
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake





--
View this message in context: http://cmake.3232098.n2.nabble.com/How-to-link-shared-lib-on-windows-visual-studio-2014-tp7593346p7593361.html
Sent from the CMake mailing list archive at Nabble.com.


More information about the CMake mailing list