Compile OpenCV with GCC visibility set to hidden
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Thu, 18 Apr 2013 06:30:15 +0000 (10:30 +0400)
committerAndrey Pavlenko <andrey.pavlenko@itseez.com>
Mon, 13 May 2013 14:33:20 +0000 (18:33 +0400)
16 files changed:
3rdparty/libjasper/CMakeLists.txt
CMakeLists.txt
apps/haartraining/cvboost.cpp
cmake/OpenCVCompilerOptions.cmake
modules/contrib/include/opencv2/contrib/detection_based_tracker.hpp
modules/core/include/opencv2/core/cvdef.h
modules/core/include/opencv2/core/cvstd.hpp
modules/core/include/opencv2/core/types_c.h
modules/gpu/perf4au/main.cpp
modules/highgui/include/opencv2/highgui.hpp
modules/python/src2/cv2.cpp
modules/ts/include/opencv2/ts.hpp
modules/ts/include/opencv2/ts/ts_gtest.h
modules/ts/include/opencv2/ts/ts_perf.hpp
samples/c/latentsvmdetect.cpp
samples/cpp/latentsvm_multidetect.cpp

index 42855e2..83c0198 100644 (file)
@@ -23,7 +23,9 @@ if(WIN32 AND NOT MINGW)
   add_definitions(-DJAS_WIN_MSVC_BUILD)
 endif(WIN32 AND NOT MINGW)
 
-ocv_warnings_disable(CMAKE_C_FLAGS -Wno-implicit-function-declaration -Wno-uninitialized -Wmissing-prototypes -Wmissing-declarations -Wunused -Wshadow -Wsign-compare)
+ocv_warnings_disable(CMAKE_C_FLAGS -Wno-implicit-function-declaration -Wno-uninitialized
+                                   -Wmissing-prototypes -Wmissing-declarations -Wunused -Wshadow
+                                   -Wsign-compare -Wstrict-overflow)
 ocv_warnings_disable(CMAKE_C_FLAGS -Wunused-parameter) # clang
 ocv_warnings_disable(CMAKE_C_FLAGS /wd4013 /wd4018 /wd4101 /wd4244 /wd4267 /wd4715) # vs2005
 
index 9f7ab02..b90e166 100644 (file)
@@ -285,7 +285,6 @@ endif()
 #  Path for build/platform -specific headers
 # ----------------------------------------------------------------------------
 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
-add_definitions(-DHAVE_CVCONFIG_H)
 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
 
 
index dcde26c..4b9f24f 100644 (file)
@@ -39,9 +39,7 @@
 //
 //M*/
 
-#ifdef HAVE_CVCONFIG_H
-  #include "cvconfig.h"
-#endif
+#include "cvconfig.h"
 
 #ifdef HAVE_MALLOC_H
   #include <malloc.h>
index a9baa97..b4da4f2 100644 (file)
@@ -250,6 +250,12 @@ set(OPENCV_EXTRA_EXE_LINKER_FLAGS         "${OPENCV_EXTRA_EXE_LINKER_FLAGS}"
 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" CACHE INTERNAL "Extra linker flags for Release build")
 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG   "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}"   CACHE INTERNAL "Extra linker flags for Debug build")
 
+# set default visibility to hidden
+if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_OPENCV_GCC_VERSION_NUM GREATER 399)
+  add_extra_compiler_option(-fvisibility=hidden)
+  add_extra_compiler_option(-fvisibility-inlines-hidden)
+endif()
+
 #combine all "extra" options
 set(CMAKE_C_FLAGS           "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
 set(CMAKE_CXX_FLAGS         "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}")
index c3db03a..c11904e 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 
-#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID)
+#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(__ANDROID__)
 
 #include <opencv2/core.hpp>
 #include <opencv2/objdetect.hpp>
@@ -9,7 +9,7 @@
 
 namespace cv
 {
-class DetectionBasedTracker
+class CV_EXPORTS DetectionBasedTracker
 {
     public:
         struct Parameters
index c033bd3..2fba135 100644 (file)
 #  define CV_ENABLE_UNROLLED 1
 #endif
 
-#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS
+#if (defined WIN32 || defined _WIN32 || defined WINCE || defined __CYGWIN__) && defined CVAPI_EXPORTS
 #  define CV_EXPORTS __declspec(dllexport)
+#elif defined __GNUC__ && __GNUC__ >= 4
+#  define CV_EXPORTS __attribute__ ((visibility ("default")))
 #else
 #  define CV_EXPORTS
 #endif
index 1353e0f..0232c6d 100644 (file)
@@ -174,7 +174,7 @@ public:
   To make it all work, you need to specialize Ptr<>::delete_obj(), like:
 
   \code
-  template<> void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }
+  template<> CV_EXPORTS void Ptr<MyObjectType>::delete_obj() { call_destructor_func(obj); }
   \endcode
 
   \note{if MyObjectType is a C++ class with a destructor, you do not need to specialize delete_obj(),
index e95170f..6aaec74 100644 (file)
@@ -272,7 +272,11 @@ CV_INLINE double cvRandReal( CvRNG* rng )
 #define IPL_BORDER_REFLECT    2
 #define IPL_BORDER_WRAP       3
 
-typedef struct CV_EXPORTS _IplImage
+typedef struct
+#ifdef __cplusplus
+  CV_EXPORTS
+#endif
+_IplImage
 {
     int  nSize;             /* sizeof(IplImage) */
     int  ID;                /* version (=0)*/
@@ -563,7 +567,11 @@ CV_INLINE int cvIplDepth( int type )
 #define CV_MAX_DIM            32
 #define CV_MAX_DIM_HEAP       1024
 
-typedef struct CV_EXPORTS CvMatND
+typedef struct
+#ifdef __cplusplus
+  CV_EXPORTS
+#endif
+CvMatND
 {
     int type;
     int dims;
@@ -610,7 +618,11 @@ CvMatND;
 
 struct CvSet;
 
-typedef struct CV_EXPORTS CvSparseMat
+typedef struct
+#ifdef __cplusplus
+  CV_EXPORTS
+#endif
+CvSparseMat
 {
     int type;
     int dims;
index 47a6c4e..afdd2e4 100644 (file)
@@ -42,9 +42,7 @@
 
 #include <cstdio>
 
-#ifdef HAVE_CVCONFIG_H
 #include "cvconfig.h"
-#endif
 #include "opencv2/core.hpp"
 #include "opencv2/gpu.hpp"
 #include "opencv2/highgui.hpp"
index 693ff79..f7e6119 100644 (file)
@@ -542,8 +542,8 @@ protected:
     Ptr<CvVideoWriter> writer;
 };
 
-template<> void Ptr<CvCapture>::delete_obj();
-template<> void Ptr<CvVideoWriter>::delete_obj();
+template<> CV_EXPORTS void Ptr<CvCapture>::delete_obj();
+template<> CV_EXPORTS void Ptr<CvVideoWriter>::delete_obj();
 
 } // cv
 
index af015eb..c834b1f 100644 (file)
@@ -1205,11 +1205,7 @@ static int to_ok(PyTypeObject *to)
   return (PyType_Ready(to) == 0);
 }
 
-extern "C"
-#if defined WIN32 || defined _WIN32
-__declspec(dllexport)
-#endif
-void initcv2();
+extern "C" CV_EXPORTS void initcv2();
 
 void initcv2()
 {
index 0df6dec..b0416da 100644 (file)
@@ -1,16 +1,7 @@
 #ifndef __OPENCV_GTESTCV_HPP__
 #define __OPENCV_GTESTCV_HPP__
 
-#ifdef HAVE_CVCONFIG_H
-#  include "cvconfig.h"
-#endif
-
-#ifndef GTEST_CREATE_SHARED_LIBRARY
-#ifdef BUILD_SHARED_LIBS
-#define GTEST_LINKED_AS_SHARED_LIBRARY 1
-#endif
-#endif
-
+#include "opencv2/core/cvdef.h"
 #include <stdarg.h> // for va_list
 
 #ifdef _MSC_VER
index 2d1227e..4bce308 100644 (file)
@@ -1912,19 +1912,7 @@ using ::std::tuple_size;
 
 #endif  // GTEST_HAS_SEH
 
-#ifdef _MSC_VER
-
-# if GTEST_LINKED_AS_SHARED_LIBRARY
-#  define GTEST_API_ __declspec(dllimport)
-# elif GTEST_CREATE_SHARED_LIBRARY
-#  define GTEST_API_ __declspec(dllexport)
-# endif
-
-#endif  // _MSC_VER
-
-#ifndef GTEST_API_
-# define GTEST_API_
-#endif
+#define GTEST_API_ CV_EXPORTS
 
 #ifdef __GNUC__
 // Ask the compiler to never inline a given function.
index 3ed82d6..93e5d28 100644 (file)
@@ -1,16 +1,6 @@
 #ifndef __OPENCV_TS_PERF_HPP__
 #define __OPENCV_TS_PERF_HPP__
 
-#ifdef HAVE_CVCONFIG_H
-#  include "cvconfig.h"
-#endif
-
-#ifndef GTEST_CREATE_SHARED_LIBRARY
-#  ifdef BUILD_SHARED_LIBS
-#    define GTEST_LINKED_AS_SHARED_LIBRARY 1
-#  endif
-#endif
-
 #include "opencv2/core.hpp"
 #include "ts_gtest.h"
 
index 95a8135..83a078e 100644 (file)
@@ -1,14 +1,8 @@
 #include "opencv2/objdetect/objdetect_c.h"
 #include "opencv2/highgui/highgui_c.h"
+#include "opencv2/core/utility.hpp"
 #include <stdio.h>
 
-#ifdef HAVE_CVCONFIG_H
-#include <cvconfig.h>
-#endif
-#ifdef HAVE_TBB
-#include "tbb/task_scheduler_init.h"
-#endif
-
 using namespace cv;
 
 static void help()
@@ -31,28 +25,17 @@ static void detect_and_draw_objects( IplImage* image, CvLatentSvmDetector* detec
     CvSeq* detections = 0;
     int i = 0;
     int64 start = 0, finish = 0;
-#ifdef HAVE_TBB
-    tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
-    if (numThreads > 0)
-    {
-        init.initialize(numThreads);
-        printf("Number of threads %i\n", numThreads);
-    }
-    else
-    {
-        printf("Number of threads is not correct for TBB version");
-        return;
-    }
-#endif
+
+    setNumThreads(numThreads);
+    numThreads = getNumThreads();
+    printf("Number of threads %i\n", numThreads);
 
     start = cvGetTickCount();
     detections = cvLatentSvmDetectObjects(image, detector, storage, 0.5f, numThreads);
     finish = cvGetTickCount();
     printf("detection time = %.3f\n", (float)(finish - start) / (float)(cvGetTickFrequency() * 1000000.0));
+    setNumThreads(-1);
 
-#ifdef HAVE_TBB
-    init.terminate();
-#endif
     for( i = 0; i < detections->total; i++ )
     {
         CvObjectDetection detection = *(CvObjectDetection*)cvGetSeqElem( detections, i );
index 92837a6..4da5506 100644 (file)
@@ -9,14 +9,6 @@
 #include <dirent.h>
 #endif
 
-#ifdef HAVE_CVCONFIG_H
-#include <cvconfig.h>
-#endif
-
-#ifdef HAVE_TBB
-#include "tbb/task_scheduler_init.h"
-#endif
-
 using namespace std;
 using namespace cv;