Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C/C++] rtl-sdr wil niet linken op OS X

Pagina: 1
Acties:

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 21-11 20:40
Ik gooi dit maar hier neer aangezien ik zo 1-2-3 geen beter plek kon vinden. Als dat er wel is dan hoor ik het graag :)

Ik ben bezig om SDR# aan de gang te krijgen op OS X 10.9. Dus ik heb Mono geïnstalleerd, samen met MonoDevelop en SDR# start zowaar gewoon op. Top, niets mee aan de hand dus. Echter, om het bruikbaar te maken voor wat ik wil heb ik rtl-sdr nodig. No biggie, dacht ik. libusb als universal binary geïnstalleerd via brew. So far, so good. Brew kent helaas geen rtl-sdr package (MacPorts wel, maar dat zie ik als laatste oplossing).

Ik heb dus rtl-sdr uit GIT gehaald, en geprobeerd te compileren. Na het lezen van wat documentatie kom ik erachter dat ik het als 32 bit library moet compileren zodat SDR# ermee overweg kan. Dat is ook de reden dat libusb een universal binary moest worden :)

Wat ik doe:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$ export CPPFLAGS='-m32'
$ export CCFLAGS='-m32'
$ export LDFLAGS='-m32'
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
...
config.status: executing depfiles commands
config.status: executing libtool commands
$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in include
make[2]: Nothing to be done for `all'.
Making all in src
  CC       librtlsdr.lo
  CC       tuner_e4k.lo
  CC       tuner_fc0012.lo
  CC       tuner_fc0013.lo
  CC       tuner_fc2580.lo
  CC       tuner_r82xx.lo
  CCLD     librtlsdr.la
  CC       rtl_sdr.o
  CCLD     rtl_sdr
  CC       rtl_tcp.o
  CCLD     rtl_tcp
  CC       rtl_test.o
  CCLD     rtl_test
  CC       rtl_fm.o
  CCLD     rtl_fm
  CC       rtl_eeprom.o
  CCLD     rtl_eeprom
  CC       rtl_adsb.o
  CCLD     rtl_adsb
Undefined symbols for architecture i386:
  "_preamble", referenced from:
      _manchester in rtl_adsb.o
  "_single_manchester", referenced from:
      _manchester in rtl_adsb.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [rtl_adsb] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


Alles gaat dus goed, totdat 'ie probeert om rtl_adsb te linken. Nu heb ik sowieso enkel de library nodig en niet de losse programma's, maar mijn kennis van C/C++ is te lang geleden om hier wat aan te doen. Laat staan mijn kennis van Makefile's om dit eruit te slopen :P

Als ik de linker als extra argument -v meegeef zoals ze adviseren dan krijg ik dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ export LDFLAGS='-m32 -v'
$ make clean
$ ./configure
$ make
...
  CC       rtl_adsb.o
  CCLD     rtl_adsb
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: i386-apple-darwin13.0.0
Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch i386 -macosx_version_min 10.9.0 -o .libs/rtl_adsb -L/usr/local/Cellar/libusb/1.0.9/lib rtl_adsb.o ./.libs/librtlsdr.dylib -lusb-1.0 -lpthread -lm -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.eprintf.a /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture i386:
  "_preamble", referenced from:
      _manchester in rtl_adsb.o
  "_single_manchester", referenced from:
      _manchester in rtl_adsb.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [rtl_adsb] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


Mja, dat zegt me dus nog steeds zo goed als niets...

Iemand die hier zijn/haar licht op kan laten schijnen en me een schop in de goeie richting kan geven?

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
En als je nou gewoon wel MacPorts gebruikt?

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 21-11 20:40
Dat is de easy way out ja, maar als MacPorts het kan dan moet ik het zelf toch ook kunnen?
Kijk, als er echt niets anders te vinden is dan ben ik best bereid om dat te doen hoor (moet even kijken of/hoe dat samenwerkt met Homebrew), maar als het niet hoeft dan liever niet ;)

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Ja, maar je kan MacPorts ook gebruiken om te kijken welke patches ze gebruiken ;)

Het hele idee van een package manager is dat al dat soort dependency en host os gedoe uit handen genomen wordt, en dat je bij een upgrade gewoon even een commando uitvoert en alles up-to-date is.

Patches kan je ook online bekijken op de macports site.

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 21-11 20:40
Heb het nu maar via MacPorts gedaan, een stuk minder geklooi :)
Niet dat alles nu werkt zoals ik wil, maar dat past niet in dit topic.