[英]linking, compiling and running a c program with a static library
我是C開發的新手。
A I在克利翁建庫(靜態)
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})
題。 如何使用靜態庫使程序正常工作?
為了使您的示例能夠正常工作,我必須更改幾件事:
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})
這行:
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文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.