我一直在尝试使用CMake编译TinyXML,这是一种小型项目,试图学习CMake。另外,我正在尝试使其编译成动态库并自行安装以使其正常运行。

到目前为止,我已经设法将其编译并安装,但是将其编译为.dll和.dll.a,使其正常工作的唯一方法是将其同时安装到/ bin和/ lib中,这使其可以工作。将两个文件都安装在两个文件夹中。此安装程序有效,但是我猜.dll应该在/ bin中,而.dll.a应该在/ lib中。这是特定于Cygwin的问题,还是我做错了什么?

最佳答案

.dll是运行时库文件,在运行时必须存在于目标系统上(并在$ PATH中)。 .dll.a文件是.dll的导入库,在链接时该文件必须存在于编译机上。您需要将.dll文件分发到程序应运行的位置,并将.dll和.dll.a都分发到使用该库链接其他程序的位置。您仅在运行该程序的计算机上不需要.dll.a文件。

当您不想创建共享库时,可以在add_library命令中使用static keyword告诉它:

add_library(mylib STATIC foo.c bar.cpp)

这样,将不会创建共享库,但是链接器会将来自库的代码添加到最终的可执行文件中。

09-04 16:07
查看更多