我们在使用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 *~
当我们编译它时,我们得到以下错误:
答案 0 :(得分:3)
图片中显示的错误是:
第一个错误,使用'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
应该做什么,ld
或gcc
没有这样的选项......我看到你对-lxively
无效的评论。
libxively.so.??
文件在哪里?在libxively/src/libxively
子目录中?如果你真的把它安装在适当的地方(嗯,/usr/lib
或/lib
或者......天哪!那么你会有更好的运气!)这会让它变得更容易,但无论如何,如果库已经正确编译,找出它的位置,并将正确的PATH放在-L
选项中。你有两个-L
,其中一个是? pi
用户通常无法读取/root
主目录中的任何内容,这些内容无法正常删除。
在您libxively.so
的{{1}}选项中使用正确的路径编译和找到-L
文件后,Makefile
选项应按预期工作。
如果没有关于文件所在位置的更多信息,如果编译成功,并且错误消息更新,则无法提供更多帮助。
编辑:
我们要重建你的Makefile:
-lxively
(我们通过聊天对此进行了讨论并计算出来)