I receive this compilation error when I try to compile my code:
/tmp/cc5InCzw.o: In function `Audiophile::lastfm_session()':
/media/Storage/Source Files/Audiophile/Scrobbling.cc:25: undefined reference to `LASTFM_init(char const*, char const*)'
/media/Storage/Source Files/Audiophile/Scrobbling.cc:27: undefined reference to `LASTFM_login(void*, char const*, char const*)'
/media/Storage/Source Files/Audiophile/Scrobbling.cc:48: undefined reference to `LASTFM_status(void*, char const**, int const**, char const**)'
/media/Storage/Source Files/Audiophile/Scrobbling.cc:51: undefined reference to `LASTFM_track_scrobble(void*, char*, char*, char*, long, unsigned int, unsigned int, unsigned int, _List**)'
/media/Storage/Source Files/Audiophile/Scrobbling.cc:54: undefined reference to `LASTFM_dinit(void*)'
collect2: error: ld returned 1 exit status
I have been trying to compile an audio program I've been making for Linux with the C library liblastfm. Here is the code for the file that holds my function for scrobbling. The username, password and API keys are changed to Xs.
#include "Audiophile.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "clastfm.h"
void Audiophile::lastfm_session()
{
scrobbling = true;
void LASTFM_SESSION *s;
// LASTFM_ALBUM_INFO *album;
// LASTFM_ARTIST_INFO *artist;
// LFMList *list = NULL,*i;
const char *status = NULL;
s = LASTFM_init("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
int rv = LASTFM_login(s,"XXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXX");
if(rv != 0)
{
cout << "\n\nAn error occurred when logining in!\n\n";
}
unsigned int length = ((position_field / 6000000000) / 10000000000);
char* title = const_cast<char*>((playing_track.title()).c_str());
char* album = const_cast<char*>((playing_track.album()).c_str());
char* artist = const_cast<char*>((playing_track.artist()).c_str());
time_t start_time;
time(&start_time);
cout << "\n\nstart time: " << start_time << "\n\n";
LASTFM_status(s,&status,NULL,NULL);
LASTFM_track_scrobble(s, artist, album, title, start_time, length,
0, 0, NULL);
LASTFM_dinit(s);
scrobbling = false;
}
I include -lclastfm in my compile statement. It is this:
g++ -g -Wall main.cc Audiophile_GTK3.cc Menu_GTK3.cc Playlist_GTK3.cc Configuration_GTK3.cc Configuration.cc Audiophile.cc Metadata.cc Scrobbling.cc -std=c++0x -o audiophile `pkg-config --cflags --libs gtkmm-3.0` $(pkg-config --cflags --libs gstreamer-1.0) $(pkg-config --libs --cflags taglib) -lclastfm -lconfig++ -lboost_system -lboost_filesystem
I'm using Arch. I checked /usr/include and clastfm.h is there. I even tried adding clastfm.h to my program's main directory. That didn't work either. I'm using GStreamer 1.24 extensively in my code, which is pure C. Other than having to clarify a few enumerations, it's worked perfectly with g++. Could an enumeration-related issue be the reason those compilation errors are occurring?
I'll provide the github to my code once I update it if that will help. Not knowing how to do version numbering is the only reason it's not updated (yet).