0

我有 21 个文件,如图所示:

在此处输入图像描述

以下 35 个函数在util.hinside a 的第 364-411 行中声明

#ifndef FlagUtil

#define FlagUtil

#endif  

代码块:

Create_Pix, Remove_Pix, my_round, edit_error, check_file, check_dir, 
read_config, write_config, write_envi_config, my_randomize, my_random, 
my_eps_random, cadd, csub, cmul, cdiv, cpwr, cconj, cimg, crel, cmod, cmod2, 
angle, cplx_sinc, PolTypeConfig, init_file_name, memory_alloc, PrintfLine, 
CreateUsageHelpDataFormat, CreateUsageHelpDataFormatInput, 
init_matrix_block, block_alloc, CheckFreeMemory, CheckFreeMemoryWin32, 
CheckFreeMemoryLinux  

以下 30 个函数在util_block.h内部的 第 99-135 行中声明

#ifndef FlagUtilBlock

#define FlagUtilBlock

#endif  

代码块:

read_matrix_int, read_matrix_float, read_matrix_cmplx, write_matrix_int, 
write_matrix_float, write_matrix_cmplx, read_matrix3d_float, 
read_matrix3d_cmplx, write_matrix3d_float, write_matrix3d_cmplx, 
read_block_matrix_int, read_block_matrix_float, 
read_block_matrix_matrix3d_float, read_block_matrix_cmplx, 
write_block_matrix_int, write_block_matrix_float, 
write_block_matrix_matrix3d_float, write_block_matrix_cmplx, 
write_block_matrix3d_float, write_block_matrix3d_cmplx, read_block_S2_avg, 
read_block_S2_noavg, read_block_S2T6_avg, read_block_SPP_avg, 
read_block_SPP_noavg, read_block_TCI_avg, read_block_TCI_noavg, 
read_block_S2_TCIelt_noavg, read_block_SPP_TCIelt_noavg, average_TCI  

以下 35 个函数在util_convert.h内部的 第 106-149 行中声明

#ifndef FlagUtilConvert

#define FlagUtilConvert

#endif  

代码块:

S2_to_C3elt, S2_to_C4elt, S2_to_T3elt, S2_to_T4elt, S2_to_T6elt, 
SPP_to_C2elt, SPP_to_T2elt, S2_to_SPP, S2_to_IPP, S2_to_C2, S2_to_C3, 
S2_to_C4, S2_to_T2, S2_to_T3, S2_to_T4, S2_to_T6, SPP_to_C2, SPP_to_T2, 
SPP_to_IPP, SPP_to_T4, C2_to_IPP, C2_to_T2, T2_to_C2, C4_to_T4, C4_to_C3, 
C4_to_T3, C4_to_C2, C4_to_IPP, T4_to_C4, T4_to_C3, T4_to_T3, C3_to_T3, 
C3_to_C2, C3_to_IPP, T3_to_C3, T6_to_C3  

该文件的内容PolSARproLib.h是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

#ifdef _WIN32
#include <dos.h>
#include <conio.h>
#endif

/* ROUTINES DECLARATION */
#include "util.h"
#include "util_block.h"
#include "util_convert.h"
#include "graphics.h"
#include "matrix.h"
#include "processing.h"
#include "statistics.h"
#include "sub_aperture.h"
#include "my_utils.h"  

该文件的内容PolSARproLib.c是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>

#ifdef _WIN32
#include <dos.h>
#include <conio.h>
#endif

/* ROUTINES DECLARATION */
#include "util.c"
#include "util_block.c"
#include "util_convert.c"
#include "graphics.c"
#include "matrix.c"
#include "processing.c"
#include "statistics.c"
#include "sub_aperture.c"
#include "my_utils.c"  

我已将这 21 个文件放在一个名为的文件夹中,并按如下方式Static Project创建了PolSARproLib.lib文件,我的机器是 Win 10x64 的机器:(这里我上传了这个项目):

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

文件graphics.obj, matrix.obj, my_utils.obj, PolSARproLib.lib, PolSARproLib.obj, processing.obj, statistics.obj, sub_aperture.obj, util.obj, util_block.obj,util_convert.obj是在项目文件夹中创建的,Debug没有任何错误,但有一些警告,例如:

1>graphics.obj : warning LNK4006: _write_header_bmp_8bit already defined in 
PolSARproLib.obj; second definition ignored  

在此处输入图像描述

在此处输入图像描述

我创建了一个名为的文件夹Arii,并在子文件夹中放置了以下 22 个文件\Arii\lib

在此处输入图像描述

我也将文件arii_anned_3components_decomposition.c放在文件夹中Arii

在此处输入图像描述

现在我arii_anned_3components_decomposition在文件夹中创建项目Arii如下(这里我已经上传了项目)

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在以下 2 张图片中,您可以看到项目的配置。同样,我应该说我正在使用 Win 10x64 机器

在此处输入图像描述

在此处输入图像描述

将外部库添加到项目中,如下所示:

Properties>C/C++>General>Additional Include directories

.h我输入放置 头文件的文件夹的路径

在此处输入图像描述

Properties>Linker>General>Additional library directories  

我输入.lib放置文件 的文件夹的路径

在此处输入图像描述

Properties>Linker>Input>Additional Dependencies

我已经输入了这些所需.lib文件的名称:

在此处输入图像描述

这是文件的开头(在 main 函数之前)arii_anned_3components_decomposition.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

#include "omp.h"

#ifdef _WIN32
#include <dos.h>
#include <conio.h>
#endif

/* ROUTINES DECLARATION */
#include "../lib/PolSARproLib.h"  

现在我构建解决方案:

在此处输入图像描述

不幸的是,我得到了 104 个错误。其中 100 个是关于 , util.h,util_convert.h中函数的多重定义util_block.h(这些函数在问题的开头列出)

错误 1-100 类似:

1>PolSARproLib.lib(PolSARproLib.obj) : error LNK2005: _C3_to_T3 already 
defined in PolSARproLib.lib(util_convert.obj)    

在此处输入图像描述

这里我上传了error and warning file.txt

  • 我真的不明白为什么我会收到这些关于代码块#ifndef #define #endif已在代码中使用的错误?
4

1 回答 1

0

正如CoryKramer 所说,我们不需要 file PolSARpro.c,实际上我们不应该#include .cppor.c文件,这就是在该文件中所做的:

该文件的内容PolSARproLib.c是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>

#ifdef _WIN32
#include <dos.h>
#include <conio.h>
#endif

/* ROUTINES DECLARATION */
#include "util.c"
#include "util_block.c"
#include "util_convert.c"
#include "graphics.c"
#include "matrix.c"
#include "processing.c"
#include "statistics.c"
#include "sub_aperture.c"
#include "my_utils.c"  

因此,为了摆脱所有这 100 个LNK2005错误,只需将这 20 个文件(省略PolSARproLib.c)放在一个文件夹中

在此处输入图像描述

并按照问题中所述执行后续步骤,以创建和构建静态库项目PolSARproLib.lib文件以及创建和构建控制台应用程序项目arii_anned_3components_decomposition.exe文件。

于 2017-09-19T16:43:34.283 回答