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