我有以下文件
main.cpp:
#include "f.h"
int main(){
f();
}
f.h:
int f();
f.cpp:
int f(){
int x=1;
}
首先,我正在将f.cpp
编译为目标文件:gcc -c f.cpp -O0
并使用此目标文件来编译main.cpp
gcc f.o main.cpp
。
执行gdb a.out
,info functions
显示f()
。执行strip a.out
会将其删除。
我想用Cmake做同样的事情。我创建了以下目录结构,主目录为f
和main
:
f
build
src
f.h
f.c
CMakeLists.txt
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.8)
project(f)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O0")
add_library(f OBJECT
f.cpp
)
main
build
src
main.cpp
CMakeLists.txt
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.8)
project(main)
set(CMAKE_BUILD_TYPE Release)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../../f/src
${CMAKE_CURRENT_SOURCE_DIR}/../../f/build)
add_executable(main
main.cpp
$<TARGET_OBJECTS:f>
)
我在cmake
中首先运行make
和f
,然后在main
中运行。我有main
可执行文件f()
。但是,发布strip main
甚至strip -s main
并不会删除符号名称f()
。
strip
符号名称?答案 0 :(得分:0)
我从未使用过strip,但根据this article,您可以使用-s
编译器选项获得相同的效果。您可以尝试将-s
添加到CMAKE_CXX_FLAGS_RELEASE
。看来它们可能不是entirely equivalent。