Raspberry Pi与C& Xively只在编译时出错

时间:2014-07-01 11:34:36

标签: c makefile raspberry-pi xively

我们在使用Raspberry Pi进行libxively工作时遇到了问题。我们使用Geany在C语言中进行编程,并希望能够使用它。但是我们遇到了很多错误。我们遵循了几个教程,但无法弄清楚是什么错误。

这是我们main.c.的一部分。当然,我们的代码中确实有feedID和API密钥。

#include </home/pi/libxively/src/libxively/xively.h>
#include </home/pi/libxively/src/libxively/xi_helpers.h>
#include </home/pi/libxively/src/libxively/xi_err.h>
#include <stdio.h> 
#include <string.h> 

#define XI_FEED_ID ---// set Xively Feed ID (numerical, no quoutes
#define XI_API_KEY "---" // set Xively API key (double-quoted string) 

int xively();

int main(int argc, char **argv)
{xively();} 

int xively() 
{
    xi_feed_t feed;
    memset( &feed, NULL, sizeof( xi_feed_t ) );

    feed.feed_id = XI_FEED_ID;
    feed.datastream_count = 2;

    feed.datastreams[0].datapoint_count = 1;
    xi_datastream_t* foo_datastream = &feed.datastreams[0];
    strcpy( foo_datastream->datastream_id, "foo" );
    xi_datapoint_t* current_foo = &foo_datastream->datapoints[0];

    feed.datastreams[1].datapoint_count = 1;
    xi_datastream_t* bar_datastream = &feed.datastreams[1];
    strcpy( bar_datastream->datastream_id, "bar" );
    xi_datapoint_t* current_bar = &bar_datastream->datapoints[0];

    // create the xively library context
    xi_context_t* xi_context
        = xi_create_context( XI_HTTP, XI_API_KEY, feed.feed_id );

    // check if everything works
    if( xi_context == NULL )
    {
        return -1;
    }

    xi_set_value_str( current_bar, "unknown" );

    xi_set_value_f32( current_foo, 0.123 );

    xi_feed_update(xi_context, &feed);

    return 0;
}

我们认为makefile出了问题,所以你走了:

#This sample makefile has been setup for a project which contains the following files: main  

#Change output_file_name.a to your desired executable filename

#Set all your object files (the object files of all the .c files in yourproject, e.g. main 
OBJ = main.o

#Set any dependant header files so that if they are edited they cause a complete re-compile
DEPS = main.h

#Any special libraries you are using in your project
LIBS = -lrt -lwiringPi -L$(HOME)/pi/libxively/src/libxively -L/root/libxively/src/libxively -dxively 
#we did try -lxively but that didn't work either 

#Set any compiler flags you want to use
CFLAGS = -lrt

#Set the compiler you are using ( gcc for C or g++ for C++ )
CC = gcc

#Set the filename extension of your C files
EXTENSION = .c

#Define a rule that applies to all files ending in the .o suffix, which says ...
%.o: %$(EXTENSION) $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

#Combine them into the outputfile
#Set your desired exe output filename here
sensortest.a: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

#Cleanup
.PHONY: clean

clean:
    srm -f *.o *~ core *~

当我们编译它时,我们得到以下错误: A screenshot of the errors we get when compiling main.c

1 个答案:

答案 0 :(得分:3)

图片中显示的错误是:

  • main.c:101:5:警告:传递'memset'的参数2从没有强制转换的指针生成整数
  • 编译失败(未定义引用'xi _....'的东西。

第一个错误,使用'0'(零!),而不是NULL。 NULL用于指针,要将内存设置为零,使用零。那将解决这个问题。

至于另一个错误,你错过了某个-lxively,...正在寻找......

来自Makefile

#Any special libraries you are using in your project
LIBS = -lrt -lwiringPi -L$(HOME)/pi/libxively/src/libxively -L/root/libxively/src/libxively -dxively 
#we did try -lxively but that didn't work either 

不知道-dxively应该做什么,ldgcc没有这样的选项......我看到你对-lxively无效的评论。

libxively.so.??文件在哪里?在libxively/src/libxively子目录中?如果你真的把它安装在适当的地方(嗯,/usr/lib/lib或者......天哪!那么你会有更好的运气!)这会让它变得更容易,但无论如何,如果库已经正确编译,找出它的位置,并将正确的PATH放在-L选项中。你有两个-L,其中一个是? pi用户通常无法读取/root主目录中的任何内容,这些内容无法正常删除。

在您libxively.so的{​​{1}}选项中使用正确的路径编译和找到-L文件后,Makefile选项应按预期工作。

如果没有关于文件所在位置的更多信息,如果编译成功,并且错误消息更新,则无法提供更多帮助。


编辑:

我们要重建你的Makefile:

-lxively

(我们通过聊天对此进行了讨论并计算出来)