Am having a problem with external references of libraries. I need to access the ogg libraries from xiph.org. I have simplified it down to the following. This works: in main.cpp
#include "OpusInfoTest.h"
int main (int arggc, char *argv[]) {
OpusInfoTest *o = new OpusInfoTest("sampletest.opus");
delete (o);
return 0;
}
in OpusInfoTest.cpp
#include "OpusInfoTest.h"
OpusInfoTest::OpusInfoTest (char *qualifiedOpusFile) {
printf ("File %s\n", qualifiedOpusFile);
ogg_sync_state ogsync;
ogg_sync_init(&ogsync);
}
OpusInfoTest::~OpusInfoTest () {
printf ("Gone\n");
}
and OpusInfoTest.h
#pragma once
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ogg.h>
class OpusInfoTest {
public:
OpusInfoTest(char *qualifiedOpusFile);
~OpusInfoTest(void);
};
Compiled with
g++ main.cpp OpusInfoTest.cpp -I ../ogg/buildl/include/ogg -I ../ogg/buildl/include -I ../opustools/src -I ../ogg/include/ogg -I ../ogg/include/ -Wno-write-strings -L ../ogg/buildl -l:libogg.a
Works fine. I then created a library OIT.a with
g++ -c -o OIT.a OpusInfoTest.cpp -I ../ogg/buildl/include/ogg -I ../ogg/buildl/include -I ../opustools/src -I ../ogg/include/ogg -I ../ogg/include/ -Wno-write-strings -L ../ogg/buildl -l:libogg.a
And then tried to use it with main.cpp
g++ main.cpp -I ../ogg/buildl/include/ogg -I ../ogg/buildl/include -I ../opustools/src -I ../ogg/include/ogg -I ../ogg/include/ -Wno-write-strings -L ../ogg/buildl -l:libogg.a -L . -l:OIT.a
returns link error
buildl -l:libogg.a -L . -l:OIT.a
/usr/bin/ld: ./OIT.a: in function `OpusInfoTest::OpusInfoTest(char*)':
OpusInfoTest.cpp:(.text+0x33): undefined reference to `ogg_sync_init'
collect2: error: ld returned 1 exit status
Probably missing something simple. New to building libraries on linux
Compile to object files like:
g++ -c OpusInfoTest.cpp -I ../ogg/buildl/include/ogg [other include paths]
You should get a file called OpusInfoTest.o
(not a library yet).
Then you can use the ar
command to create libOIT.a
, which is a static library.
ar rcs libOIT.a OpusInfoTest.o
Lastly, link everything in the correct order:
g++ main.cpp [include paths] -L. -lOIT -L../ogg/buildl -logg
You need to make sure your libOIT.a
library shows up first in the linking above, since it depends on the other libogg.a
library.