linux/android编译常见问题

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)

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rikeyone/article/details/79976240
个人分类: build
上一篇由_OF_DECLARE引发对内核SECTION段解析的思考(基于kernel-4.9)
下一篇结合early_param/__setup/__setup_param来学习cmdline的解析(基于kernel-4.9)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭