浏览代码

Merge pull request #267 from paullouisageneau/windows-examples-dynamic

Link examples against dynamic library on Windows
Paul-Louis Ageneau 4 年之前
父节点
当前提交
613ebf2564

+ 6 - 17
CMakeLists.txt

@@ -36,7 +36,7 @@ set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
 
 if(WIN32)
 	add_definitions(-DWIN32_LEAN_AND_MEAN)
-	if (MSVC)
+	if(MSVC)
 		add_definitions(-DNOMINMAX)
 		add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 		add_definitions(-D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
@@ -163,8 +163,8 @@ target_link_libraries(datachannel-static PUBLIC Threads::Threads plog::plog)
 target_link_libraries(datachannel-static PRIVATE Usrsctp::Usrsctp)
 
 if(WIN32)
-	target_link_libraries(datachannel PRIVATE ws2_32) # winsock2
-	target_link_libraries(datachannel-static PRIVATE ws2_32) # winsock2
+	target_link_libraries(datachannel PUBLIC ws2_32) # winsock2
+	target_link_libraries(datachannel-static PUBLIC ws2_32) # winsock2
 endif()
 
 if(NO_MEDIA)
@@ -247,10 +247,7 @@ add_library(LibDataChannel::LibDataChannelStatic ALIAS datachannel-static)
 install(TARGETS datachannel LIBRARY DESTINATION lib)
 install(FILES ${LIBDATACHANNEL_HEADERS} DESTINATION include/rtc)
 
-if(MSVC)
-	target_compile_options(datachannel PRIVATE /wd4251)
-	target_compile_options(datachannel-static PRIVATE /wd4251)
-else()
+if(NOT MSVC)
 	target_compile_options(datachannel PRIVATE -Wall -Wextra)
 	target_compile_options(datachannel-static PRIVATE -Wall -Wextra)
 endif()
@@ -275,11 +272,7 @@ if(NOT NO_TESTS)
 		set_target_properties(datachannel-tests PROPERTIES OUTPUT_NAME tests)
 	endif()
 	target_include_directories(datachannel-tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
-	if(WIN32)
-		target_link_libraries(datachannel-tests datachannel-static) # DLL exports only the C API
-	else()
-		target_link_libraries(datachannel-tests datachannel)
-	endif()
+	target_link_libraries(datachannel-tests datachannel)
 
 	# Benchmark
 	add_executable(datachannel-benchmark test/benchmark.cpp)
@@ -291,11 +284,7 @@ if(NOT NO_TESTS)
 	endif()
 	target_compile_definitions(datachannel-benchmark PRIVATE BENCHMARK_MAIN=1)
 	target_include_directories(datachannel-benchmark PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
-	if(WIN32)
-		target_link_libraries(datachannel-benchmark datachannel-static) # DLL exports only the C API
-	else()
-		target_link_libraries(datachannel-benchmark datachannel)
-	endif()
+	target_link_libraries(datachannel-benchmark datachannel)
 endif()
 
 # Examples

+ 1 - 6
examples/client/CMakeLists.txt

@@ -9,14 +9,9 @@ target_compile_definitions(datachannel-client PUBLIC STATIC_GETOPT)
 else()
 add_executable(datachannel-client main.cpp parse_cl.cpp parse_cl.h)
 endif()
+
 set_target_properties(datachannel-client PROPERTIES
 	CXX_STANDARD 17
 	OUTPUT_NAME client)
-
-if(WIN32)
-	target_link_libraries(datachannel-client datachannel-static) # DLL exports only the C API
-else()
-	target_link_libraries(datachannel-client datachannel)
-endif()
 target_link_libraries(datachannel-client datachannel nlohmann_json)
 

+ 2 - 10
examples/copy-paste/CMakeLists.txt

@@ -4,19 +4,11 @@ add_executable(datachannel-copy-paste-offerer offerer.cpp)
 set_target_properties(datachannel-copy-paste-offerer PROPERTIES
 	CXX_STANDARD 17
 	OUTPUT_NAME offerer)
-if(WIN32)
-	target_link_libraries(datachannel-copy-paste-offerer datachannel-static) # DLL exports only the C API
-else()
-	target_link_libraries(datachannel-copy-paste-offerer datachannel)
-endif()
+target_link_libraries(datachannel-copy-paste-offerer datachannel)
 
 add_executable(datachannel-copy-paste-answerer answerer.cpp)
 set_target_properties(datachannel-copy-paste-answerer PROPERTIES
 	CXX_STANDARD 17
 	OUTPUT_NAME answerer)
-if(WIN32)
-	target_link_libraries(datachannel-copy-paste-answerer datachannel-static) # DLL exports only the C API
-else()
-	target_link_libraries(datachannel-copy-paste-answerer datachannel)
-endif()
+target_link_libraries(datachannel-copy-paste-answerer datachannel)
 

+ 1 - 7
examples/media/CMakeLists.txt

@@ -4,11 +4,5 @@ add_executable(datachannel-media main.cpp)
 set_target_properties(datachannel-media PROPERTIES
         CXX_STANDARD 17
         OUTPUT_NAME media)
+target_link_libraries(datachannel-media datachannel nlohmann_json)
 
-if(WIN32)
-    target_link_libraries(datachannel-media datachannel-static) # DLL exports only the C API
-else()
-    target_link_libraries(datachannel-media datachannel)
-endif()
-
-target_link_libraries(datachannel-media datachannel nlohmann_json)

+ 0 - 7
examples/sfu-media/CMakeLists.txt

@@ -4,12 +4,5 @@ add_executable(datachannel-sfu-media main.cpp)
 set_target_properties(datachannel-sfu-media PROPERTIES
 		CXX_STANDARD 17
 		OUTPUT_NAME sfu-media)
-
-if(WIN32)
-	target_link_libraries(datachannel-sfu-media datachannel-static) # DLL exports only the C API
-else()
-	target_link_libraries(datachannel-sfu-media datachannel)
-endif()
-
 target_link_libraries(datachannel-sfu-media datachannel nlohmann_json)
 

+ 5 - 5
include/rtc/description.hpp

@@ -63,7 +63,7 @@ public:
 	string generateSdp(string_view eol) const;
 	string generateApplicationSdp(string_view eol) const;
 
-	class Entry {
+	class RTC_CPP_EXPORT Entry {
 	public:
 		virtual ~Entry() = default;
 
@@ -95,7 +95,7 @@ public:
 		Direction mDirection;
 	};
 
-	struct Application : public Entry {
+	struct RTC_CPP_EXPORT Application : public Entry {
 	public:
 		Application(string mid = "data");
 		virtual ~Application() = default;
@@ -120,7 +120,7 @@ public:
 	};
 
 	// Media (non-data)
-	class Media : public Entry {
+	class RTC_CPP_EXPORT Media : public Entry {
 	public:
 		Media(const string &sdp);
 		Media(const string &mline, string mid, Direction dir = Direction::SendOnly);
@@ -183,7 +183,7 @@ public:
 		void addRTPMap(const RTPMap &map);
 	};
 
-	class Audio : public Media {
+	class RTC_CPP_EXPORT Audio : public Media {
 	public:
 		Audio(string mid = "audio", Direction dir = Direction::SendOnly);
 
@@ -191,7 +191,7 @@ public:
 		void addOpusCodec(int payloadType);
 	};
 
-	class Video : public Media {
+	class RTC_CPP_EXPORT Video : public Media {
 	public:
 		Video(string mid = "video", Direction dir = Direction::SendOnly);
 

+ 3 - 0
include/rtc/include.hpp

@@ -32,6 +32,9 @@
 #ifndef _WIN32_WINNT
 #define _WIN32_WINNT 0x0602 // Windows 8
 #endif
+#ifdef _MSC_VER
+#pragma warning(disable:4251) // disable "X needs to have dll-interface..."
+#endif
 #else
 #define RTC_CPP_EXPORT
 #endif