我是C开发的新手。
A 我在CLion中构建了一个库(静态)
library.h
#ifndef MYLIB_LIBRARY_H
#define MYLIB_LIBRARY_H
int add(int a, int b);
int sub(int a, int b);
#endif
LIBRARY.C
#include "library.h"
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
的CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(MyLib)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES library.c library.h)
add_library(MyLib ${SOURCE_FILES})
B。创建名为App的C可执行项目,并将libMyLib.a
复制到App的lib目录中。
的main.c
#include <stdio.h>
#include "library.h" // error
int main() {
printf("Hello, World!\n", add(1, 2)); // error
return 0;
}
项目App的CMakeLists.txt 和链接器的指定文件夹。
cmake_minimum_required(VERSION 3.6)
project(App)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)
link_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(App ${SOURCE_FILES})
问题。如何使用静态库使我的程序工作?
答案 0 :(得分:0)
我必须改变一些事情才能让你的榜样发挥作用:
include
目录。library.h
放入此包含目录。修改项目CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.6)
project(App)
set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)
# get libMyLib.a
find_library(MY_LIB
NAMES libMyLib.a
PATHS ${PROJECT_SOURCE_DIR}/lib)
# get library.h
include_directories(${PROJECT_SOURCE_DIR}/include)
add_executable(App ${SOURCE_FILES})
# link App with libMyLib.a
target_link_libraries(App ${MY_LIB})
答案 1 :(得分:0)
这一行:
printf("Hello, World!\n", add(1, 2)); // error
在编译时生成错误,而不是链接时间
原因是printf()
函数作为第一个参数(格式字符串)Hello, World!\n
和第二个参数传递:add(1,2)
但是,格式中没有格式说明符调用add()
编译器将输出消息:
warning: too many arguments for format [-Wformat-extra-args]
在纠正编译问题之前,没有理由查看Cmakelists.txt文件