【发布时间】:2021-05-01 10:34:52
【问题描述】:
我有一个相当奇怪的问题,我不知道我是否能够准确描述,但我会尽力而为。我从来没有使用过静态库,所以我在这里没有太多经验。
我有一个代码包,其中包含许多用 C 语言创建的文件,当然还有头文件。我预先创建了一个 MakeFile 来将生成的代码编译成一个静态库。这个 MakeFile 的结构非常简洁:
# makeLibrary.mk
# File : Makefile for the static library
#
GOAL := someName
BUILD := library
LIBTYPE := static
SOURCES := \
file1.c \
file2.c \
file3.c \
file4.c \
file5.c \
file6.c
CFLAGS := someFlags
DEFINES := someDefines
INCLUDE_PATH := \
../export
INSTALL_DIR := ../releases/${ARCH}
HEADER_INSTALL_DIR :=
HEADER_FILES :=
这将创建文件:file1.o、file2.o、...、file6.o 和一个主库文件:libsomeName.a。 libsomeName.a 文件大约为 614KB,这是我的预期。 到目前为止,对我来说一切都很好。
然后我需要将此库文件附加到我的项目中。 要创建一个可执行应用程序,我需要另一个 MakeFile,所以我创建了一个。这个 MakeFile 的结构看起来更像这样:
# makeApplication.mk
# File : Makefile for the executable application
#
GOAL := executableApp
BUILD := application
SOURCES := \
myFile_main.c
CFLAGS := someFlags
DEFINES := someDefines
因为我想包含一个以前创建的库,所以我在这个 makeApplication.mk 中定义它:
# Additional libraries, created in prev. makeLibrary.mk
STATLIBS := \
someName
由于创建的库和头文件位于不同的文件夹中,因此我定义了这些文件的位置:
#Library header file localization
INCLUDE_PATH := \
../../../export
#Library file localization
LIBRARY_PATH := \
../../../releases/$(ARCH)
我认为到目前为止一切都很好。
现在我的问题开始了,我不确定我是否理解正确。我想在 myFile_main.c 文件中使用添加到 libsomeName.a 静态库的函数。 因此,为此我需要在属于该库的 myFile_main.c 文件中添加头文件:
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
#include "file5.h"
#include "file6.h"
...
//Here is some code where I use functions defined in the static library. The prototypes for these
//functions are in the header files, of course.
...
所有代码都能正确编译,没有任何错误和警告。但是创建的内容(可执行应用程序)让我有点担心。可执行应用文件只有 13KB。 看看包含的库是 614KB 的事实,这似乎不太合理。
在创建静态库时,是否需要执行更多步骤才能确保一切正常?
与库本身相比,为什么应用程序可执行文件的大小如此之小?
我无法测试应用程序,因为目标尚未准备好。是否可以运行/测试这样创建的应用程序?
【问题讨论】:
标签: c++ c gcc makefile static-libraries