Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake相当于什么;gcc-可视性=隐藏;控制共享库的导出符号时? 我在C++中开发了跨平台的软件。据我所知,Linux.so默认情况下导出了所有符号,通过“gcc-fvisibility=hidden”我可以将所有导出的符号设置为隐藏,然后为我想要导出的类和函数设置\uu属性(可见性(“默认”),这样我就可以控制我想要导出的内容_Gcc_Cmake_Visibility - Fatal编程技术网

CMake相当于什么;gcc-可视性=隐藏;控制共享库的导出符号时? 我在C++中开发了跨平台的软件。据我所知,Linux.so默认情况下导出了所有符号,通过“gcc-fvisibility=hidden”我可以将所有导出的符号设置为隐藏,然后为我想要导出的类和函数设置\uu属性(可见性(“默认”),这样我就可以控制我想要导出的内容

CMake相当于什么;gcc-可视性=隐藏;控制共享库的导出符号时? 我在C++中开发了跨平台的软件。据我所知,Linux.so默认情况下导出了所有符号,通过“gcc-fvisibility=hidden”我可以将所有导出的符号设置为隐藏,然后为我想要导出的类和函数设置\uu属性(可见性(“默认”),这样我就可以控制我想要导出的内容,gcc,cmake,visibility,Gcc,Cmake,Visibility,我的问题是,使用CMake,我如何才能作为“gcc-fvisibility=hidden”控件进行工作?您可以像这样向CMake编译器添加一个标志: set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") 要确保仅在Linux下执行此操作,您可以使用以下代码: if(UNIX AND CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "${CMAKE_C_FLA

我的问题是,使用CMake,我如何才能作为“gcc-fvisibility=hidden”控件进行工作?

您可以像这样向CMake编译器添加一个标志:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
要确保仅在Linux下执行此操作,您可以使用以下代码:

if(UNIX AND CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
endif()

您不应该直接设置编译器标志,而应该使用当前的CMake版本和属性。通过这种方式,您可以避免CMakeLists中的编译器细节,并提高跨平台的适用性(避免支持GCC和notclang等错误)

,即,如果使用C++,则调用

set(CMAKE\u CXX\u VISIBILITY\u PRESET hidden)
全局设置属性,或
set\u target\u properties(MyTarget properties CXX\u VISIBILITY\u PRESET hidden)
将设置限制到特定库或可执行目标。如果您使用的是C,只需在上述命令中用C替换CXX即可。您可能还想调查该财产


的文档还包括一些与这两个属性相关的提示和示例。

事实上,-fvisibility=hidden也可以与clang一起使用,因此如果您希望能够使用具有此功能的两个编译器,您可以使用以下内容:if(${CMAKE_CXX_COMPILER_ID})STREQUAL“GNU”或“${CMAKE_CXX_COMPILER_ID}”STREQUAL“clang”)。。。ENDIF()我找不到任何合适的例子。你能详细说明一下吗?我猜是C++的StIGTestAdjixType(MyTalkCxVVisuBILITY预置隐藏)@阿巴伊河