c++ - 声明和定义函数静态会产生“对 function_name() 的未定义引用”
问题描述
utils.hpp
这是在(NON OOP,所以不在任何类中)中定义的函数原型声明
static void create_xy_table(const k4a_calibration_t *calibration, k4a_image_t xy_table);
static void generate_point_cloud(const k4a_image_t depth_image,
const k4a_image_t xy_table,
k4a_image_t point_cloud,
int *point_count);
static void write_point_cloud(const char *file_name, const k4a_image_t point_cloud, int point_count);
我有他们的定义,utils.cpp
其中包括utils.hpp
.
main
当我在function in调用 use 任何函数时main.cpp
,我收到以下错误:
/tmp/ccFcMfYB.o: In function `main':
main.cpp:(.text+0x208): undefined reference to
`create_xy_table(_k4a_calibration_t const*, _k4a_image_t*)
编译命令:
g++ -o build/testtest src/main.cpp src/utils.cpp -I./include -lk4a
将所有函数定义为非静态和编译完美!我无法解决这个问题。
- 到底发生了什么?
- 如果需要定义和链接静态函数,应该怎么做才能正确包含/链接?
我的系统配置:gcc 版本 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
编辑:这是我在 utils.cpp 中的函数定义:
static void create_xy_table(const k4a_calibration_t *calibration, k4a_image_t xy_table)
{
k4a_float2_t *table_data = (k4a_float2_t *)(void *)k4a_image_get_buffer(xy_table);
int width = calibration->depth_camera_calibration.resolution_width;
int height = calibration->depth_camera_calibration.resolution_height;
k4a_float2_t p;
k4a_float3_t ray;
int valid;
for (int y = 0, idx = 0; y < height; y++)
{
p.xy.y = (float)y;
for (int x = 0; x < width; x++, idx++)
{
p.xy.x = (float)x;
k4a_calibration_2d_to_3d(
calibration, &p, 1.f, K4A_CALIBRATION_TYPE_DEPTH, K4A_CALIBRATION_TYPE_DEPTH, &ray, &valid);
if (valid)
{
table_data[idx].xy.x = ray.xyz.x;
table_data[idx].xy.y = ray.xyz.y;
}
else
{
table_data[idx].xy.x = nanf("");
table_data[idx].xy.y = nanf("");
}
}
}
}
EDIT2:这是我在main.cpp
.
k4a_calibration_t calibration;
k4a_image_t xy_table = NULL;
/*
Calibration initialization codes here
*/
create_xy_table(&calibration, xy_table);
解决方案
推荐阅读
- python - 多标签分类或多类分类或序列标注问题?
- php - 如何访问 Symfony 中的绝对 URL 并提升一级?
- sql - 两个表的 SQL Server 外键分区
- javascript - 无法在 .css() 函数中分配多个 HTML 元素
- git - Git 管道复用容器
- c++ - 如何将“10:10”翻译成纪元格式
- gcc - avr-gcc 版本:不会从 5.4 更新到 9.2
- python-3.x - Python:请求中的 POST 数据问题
- office-js - Microsoft Outlook O365“加载项错误”自动重启
- c# - 更改 datetimepicker 背景颜色 C#