如何解决无法在C程序中正确使用C ++静态库带有CLion的Mingw64
我正在尝试制作一个简单的C ++静态库以与C程序一起使用。我的文件如下。
// strarr.h
#pragma once
#include <stdio.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef char **str_arr;
str_arr new_str_arr(size_t size);
void del_str_arr(str_arr arr,size_t size);
str_arr resize_str_arr(str_arr arr,size_t arr_size,size_t new_size);
size_t add_str(str_arr arr,size_t index,char *str);
#ifdef __cplusplus
}
#endif
void print_arr(str_arr arr,size_t size);
// strarr.c
#include "strarr.h"
#include <stdlib.h>
str_arr new_str_arr(size_t size)
{
str_arr arr = (str_arr)calloc(size,sizeof(char*));
if (arr == NULL) return NULL;
for (size_t i = 0; i < size; i++)
{
arr[i] = (char*)calloc(1,sizeof(char));
if (arr[i] == NULL) return NULL;
}
return arr;
}
void del_str_arr(str_arr arr,size_t size)
{
for (size_t i = 0; i < size; i++)
{
free(arr[i]);
arr[i] = NULL;
}
free(arr);
arr = NULL;
}
str_arr resize_str_arr(str_arr arr,size_t new_size)
{
return NULL;
}
size_t add_str(str_arr arr,char* str)
{
return 0;
}
// strarr.cpp
#include "strarr.h"
#include <iostream>
void print_arr(str_arr arr,size_t size)
{
for (size_t i = 0; i < size; i++)
std::cout << i << ": " << arr[i] << std::endl;
}
我正在使用以下命令手动编译
g++ -c strarr.c -o bin/static/strarr.o
g++ -lstdc++ -c strarr.cpp -o bin/static/strarrcpp.o
ar rvs bin/static/libqbb.a bin/static/strarr.o bin/static/strarrcpp.o
我已将成功构建的库导入C项目中,但是在构建它时会吐出此错误。
====================[ Build | all | Debug ]=====================================
C:\Users\AGSoldier\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\202.6397.106\bin\cmake\win\bin\cmake.exe --build "D:\AGSoldier\Sidereal Works\Qbb\qbb_test\build" --target all -- -j 3
Scanning dependencies of target qbb_test
[ 50%] Building C object CMakeFiles/qbb_test.dir/main.c.obj
[100%] Linking C executable qbb_test.exe
CMakeFiles\qbb_test.dir/objects.a(main.c.obj): In function `main':
D:/AGSoldier/Sidereal Works/Qbb/qbb_test/main.c:468: undefined reference to `print_arr'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[2]: *** [CMakeFiles\qbb_test.dir\build.make:107: qbb_test.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:95: CMakeFiles/qbb_test.dir/all] Error 2
mingw32-make.exe: *** [Makefile:103: all] Error 2
我做错了什么?我搜索了几个小时,没有任何结果。
解决方法
您需要放置声明
implementation "org.springframework.boot:spring-boot-starter-undertow"
如果要从* .c文件调用该函数,请进入 extern C 范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。