1.gcc可以用来编译.c源文件,也可以用来编译c++源代码。
(1)当gcc检测到.c文件时会按照c语言的语法进行编译,当检测到是.cpp时,就会按照c++语法进行编译;
(2)gcc只能编译cpp文件,但是在链接时,需要链接对应的libstdc++库才能够链接成功,当然这句话并不是绝对的,
因为链接是否成功主要看代码中的symbol是否都能够找到,如果C++文件中并没有调用到libstdc++中的内容,
那么即使不链接libstdc++也是可以直接链接成功的。
2.g++既可以用来编译.c文件,也可以用来编译c++文件。
(1)C++是C的超集,那么也就是说C代码同样可以支持,所以g++编译C代码完全不是问题。
(2)g++编译C++代码,g++在链接时是会自动链接对应libstdc++库的,不用我们显式加入-lstdc++编译选项了
3.有了上面的知识,我们就可以知道C和C++混编是一件很容易的事情了
gcc -c test1.c
gcc -c test2.cpp
gcc test1.o test2.o -o test -lstdc++
4.gcc编译静态库
gcc –c test1.c test2.c 生成.o目标文件
ar rcv libtest.a test1.o test2.o 将目标文件打包成库
5. gcc编译动态库
gcc -c fPIC test1.c test2.c 编译生成位置独立代码(-fPIC)
gcc -shared test1.o test2.o -o libtest.so 将.o文件打包成.so库
通常使用一条语句完成动态库编译:
gcc -fPIC -shared -o libtest.so test1.c test2.c
6. android编译静态库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=libtest
LOCAL_SRC_FILES := test1.c test2.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_STATIC_LIBRARY)
7. android编译动态库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=libtest
LOCAL_SRC_FILES := test1.c test2.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)