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

Craig Scott craig.scott at crascit.com
Mon Apr 25 21:42:25 EDT 2016


Also see the GenerateExportHeader module
<https://cmake.org/cmake/help/latest/module/GenerateExportHeader.html> which
can handle much of this for you in a more platform independent way. The
examples in the docs talk about classes, but it can also be applied to
functions.


On Tue, Apr 26, 2016 at 11:33 AM, J Decker <d3ck0r at gmail.com> wrote:

> Add __declspec(dllexport) before void HelloFunc()
> On Apr 25, 2016 6:01 PM, "Chaos Zhang" <zcsd2012 at gmail.com> 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
>
>
> --
>
> 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
>



-- 
Craig Scott
Melbourne, Australia
http://crascit.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160426/a2d5b561/attachment.html>


More information about the CMake mailing list