HDF-EOS:编译/链接错误c / c ++

时间:2017-05-22 09:07:42

标签: c hdf

我正在尝试编译示例程序以使用HDF-EOS。示例代码取自HDF-EOS website(因此我只会在顶部发布):

/* This example shows how to read a data field in HDF-EOS2 grid data. */

#include <mfhdf.h>
#include <hdf.h>
#include <HdfEosDef.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int32 gridfile1;
    int32 grid1;
    int32 datafield1rank;
    int32 datafield1dimsize[32];
    int32 datafield1type;
    char datafield1dimname[512];
    float32 *datafield1data;
    int32 i, j;

    /* Open 'AMSR_E_L3_RainGrid_B05_200707.hdf' using grid API */
    if ((gridfile1 = GDopen("AMSR_E_L3_RainGrid_B05_200707.hdf", DFACC_RDONLY)) == -1) {
        fprintf(stderr, "error: cannot open grid 'AMSR_E_L3_RainGrid_B05_200707.hdf'\n");
        return -1;
    }

return 0;

相应的make文件如下所示:

HDF4_DIR=<hdf4_path>
HDFEOS2_DIR=<hdfeos2_path>

CC=$(HDF4_DIR)/bin/h4cc

CFLAGS=-I$(HDFEOS2_DIR)/include
LDFLAGS=-L$(HDFEOS2_DIR)/lib
LIBS=-lhdfeos -lGctp

read_grid: read_grid.c
$(CC) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@

除了上面提到的路径,我还添加了到hdf5库的链接,所以我的make文件看起来像这样:

HDF4_DIR=<hdf4_path>
HDFEOS2_DIR=<hdfeos2_path>
HDF5_DIR=<hdf5_path>

CC=$(HDF4_DIR)/bin/h4cc

CFLAGS=-I$(HDFEOS2_DIR)/include -I$(HDF4_DIR)/include -I$(HDF5_DIR)/include
LDFLAGS=-L$(HDFEOS2_DIR)/lib64 -L$(HDF4_DIR)/lib64 -L$(HDF5_DIR)/lib64
LIBS=-lhdfeos -lGctp

read_grid: read_grid.c
    $(CC) read_hdf_eos.c $(CFLAGS) $(LDFLAGS) $(LIBS) -o $@

现在的问题是它没有编译,抛出像这样的链接错误:

<hdfeos2_path>/lib64/libhdfeos.a(GDapi.o): In function `lamazDxDtheta':
<hdfeos2_path>/src/GDapi.c:9579: undefined reference to `sin'
<hdfeos2_path>/src/GDapi.c:9580: undefined reference to `sin'
...
collect2: error: ld returned 1 exit status

所以对我来说,这看起来像一个链接问题,但我不明白为什么。 为了增加混乱,我得到另一个错误:

read_grid.o: In function `main':
read_grid.c:(.text.startup+0x0): multiple definition of `main'
read_grid.o:read_grid.c:(.text.startup+0x0): first defined here

当然,我没有多次定义main。在抛出相同链接错误的第二个示例程序中,我没有收到此错误。

因此,如果有人对第一个问题有了解,那就是链接,我会非常高兴。

解决方案:

  1. 在编译语句末尾添加-lm,删除链接问题
  2. 删除编译语句中的read_hdf_eos.c,导致多个main问题
  3. 感谢您的评论和提示。

0 个答案:

没有答案