linking problems

solarJack's picture

I am getting massive linking problems, cant figure out why---

Compiling...
• Preprocessing...
• Converting binary files
• Updating repository information...
• Installing missing libraries...
‣ Downloading libexamplelibrary-gordonrudman
‣ Installing libexamplelibrary-gordonrudman
• Generating linker script 
• Compiling sketch...
• Compiling core...
‣ esp8266
• Compiling libraries...
‣ WiFi [/home/jack/.uecide/libraries/Communication/WiFi]
‣ SPI [/home/jack/.uecide/libraries/DeviceControl/SPI]
‣ ESP8266WiFi [/home/jack/Documents/UECIDE/libraries/ESP8266WiFi]
‣ Arduino [/home/jack/.uecide/libraries/Sensors/Arduino]
• Linking sketch...
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `ClientContext::_write_from_source(DataSource*)':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:215: multiple definition of `WiFiClient::write(unsigned char)'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:74: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::peek()':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:283: multiple definition of `WiFiClient::peek()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:133: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::connected()':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:333: multiple definition of `WiFiClient::connected()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:162: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::operator bool()':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:349: multiple definition of `WiFiClient::operator bool()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:185: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::connect(char const*, unsigned short)':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:126: multiple definition of `WiFiClient::connect(char const*, unsigned short)'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:41: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::available()':
/home/jack/Documents/UECIDE/libraries/ESP8266WiFi/src/WiFiClient.cpp:256: multiple definition of `WiFiClient::available()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:105: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::write(unsigned char const*, unsigned int)':
WiFiClient.cpp:(.text._ZN10WiFiClient5writeEPKhj+0xc): multiple definition of `WiFiClient::write(unsigned char const*, unsigned int)'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:78: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::read()':
WiFiClient.cpp:(.text._ZN10WiFiClient4readEv+0x4): multiple definition of `WiFiClient::read()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:114: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::read(unsigned char*, unsigned int)':
WiFiClient.cpp:(.text._ZN10WiFiClient4readEPhj+0x8): multiple definition of `WiFiClient::read(unsigned char*, unsigned int)'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:124: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::WiFiClient()':
WiFiClient.cpp:(.text._ZN10WiFiClientC2Ev+0xc): multiple definition of `WiFiClient::WiFiClient()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/cores/esp8266/esp8266/Print.h:45: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::WiFiClient()':
WiFiClient.cpp:(.text._ZN10WiFiClientC2Ev+0xc): multiple definition of `WiFiClient::WiFiClient()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/cores/esp8266/esp8266/Print.h:45: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::connect(IPAddress, unsigned short)':
WiFiClient.cpp:(.text._ZN10WiFiClient7connectE9IPAddresst+0x64): multiple definition of `WiFiClient::connect(IPAddress, unsigned short)'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:50: first defined here
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/libcat_ESP8266WiFi.a(WiFiClient.cpp.o): In function `WiFiClient::status()':
WiFiClient.cpp:(.text._ZN10WiFiClient6statusEv+0x0): multiple definition of `WiFiClient::status()'
/home/jack/.uecide/cache/esp8266/esp8266-nodemcuv2/librepo_WiFi.a(WiFiClient.cpp.o):/home/jack/.uecide/libraries/Communication/WiFi/src/WiFiClient.cpp:176: first defined here
collect2: error: ld returned 1 exit status
Compiling Failed

Comments

Lots of multiple definitions.

Lots of multiple definitions.... Nice.

I think it's because of it deciding to include two WiFi libraries - the WiFi.h and the ESP8266WiFi.h library.

/home/jack/.uecide/libraries/Communication/WiFi really shouldn't exist - it should be /home/jack/.uecide/libraries/Communications/arduino/WiFi and /home/jack/Documents/UECIDE/libraries/ESP8266WiFi looks like it's been manually installed by you - that should be installed in .uecide as part of the ESP8266 core installation - there should never be a need to manually install that.

solarJack's picture

thankyou very much.. I will

thankyou very much.. I will see if I can remove it.. yes u are correct..I have been trying to install several 8266wifi libraries and not doing things right.. thanks

solarJack's picture

That helped me alot.. I am

That helped me alot.. I am trying to get a handle on how the libraies are organised.. now I am having trouble cant find arduino.h I un-install and then re-install and hope things get located to their proper place.. but arduino.h still is hiding somewhere..

solarJack's picture

I tried platformio and

I tried platformio and vstudio but in over my head.. I just want to create one or maybe two projects using nodeMCU.. and arduinoIDE kinda was funky.. this UECIDE looks perfect..I just need to learn how to use it I think.. thankyou folks who did all this platform work..wow.. awesome..looks like what I want to work environment.. thankyou I will contribute

ESP8266 support in UECIDE is

ESP8266 support in UECIDE is "iffy" at the moment. It's a core that has been no end of trouble.

TBH I have started using arduino-cli for ESP32 and ESP8266 until I can get it sorted out in UECIDE.

I'd restart your installation from scratch if I were you:

  1. Delete ~/.uecide
  2. Delete ~/Documents/UECIDE/libraries
  3. Open UECIDE
  4. In the plugin manager:
    • Refresh
    • Upgrade all
    • Refresh
    • Install the NodeMCU board

The basic libraries and tools you need should be installed.

However, you may find (as I am at the moment), that it doesn't get past "Generating linker script". I don't know at the moment why.

If you want to use arduino-cli, which I have had good results with, you can use whatever editor you like.

I use it with a Makefile. This is my example one - it's for a "generic" ESP8266 board:

BOARD=esp8266:esp8266:generic
OPTS=CrystalFreq=26,FlashFreq=40,FlashMode=dout,ResetMethod=nodtr_nosync,baud=115200,dbg=Disabled,eesz=1M,exception=disabled,ip=lm2f,led=4,lvl=None____,sdk=nonosdk221,ssl=basic,vt=flash,wipe=none,xtal=80
SKETCH=SketchName
PORT?=/dev/ttyUSB0

SUBDIR=$(subst :,.,$(BOARD))
BIN=build/$(SUBDIR)/$(SKETCH).ino.bin

$(BIN): $(SKETCH).ino
    arduino-cli compile --fqbn $(BOARD):$(OPTS)

install: $(BIN)
    arduino-cli upload --fqbn $(BOARD):$(OPTS) -p $(PORT)

clean:
    rm -rf build

I'm currently considering ways of integrating arduino-cli into UECIDE as an optional compilation backend.

solarJack's picture

i will do this what u just

i will do this what u just said and see how that goes.. I am retired and just working on an off-grid solar project.. if u need a ginny-pig for some kind of beta work-- i will step forward..lol.. I like the look and 'feel' of this uecide.. its just right--somewhere between platforminsanityio and too-clumpsy arduinoide.. i have several projects..different boards.. arduino is retarded switching from one board project to some other board in another project.. I appreciate the work u folks are doing..just right..

solarJack's picture

Compiling...

Compiling... • Preprocessing... • Converting binary files • Generating linker script • Compiling sketch... • Error at line 135 in file nodeMCU_HotWaterCat5.ino: ‣ ESP_WiFiManager.h: No such file or directory

Compiling Failed

Ok, I see where all the

Ok, I see where all the problems are stemming from. That library wants to include different headers depending on the platform, and UECIDE then tries to compile all the headers it finds. It's a bit of a problem with UECIDE.

I would suggest:

  1. Clone the repo into libraries:
$ cd Documents/UECIDE
$ mkdir -p libraries
$ cd libraries
$ git clone https://github.com/khoih-prog/ESP_WiFiManager.git

Then edit the library to remove the ESP32 headers:

  • Edit the file ~/Documents/UECIDE/libraries/ESP_WiFiManager.h
  • Delete lines 49,50 and 68

The current content of those lines is:

 49   #include <WiFi.h>
 50   #include <WebServer.h>
 68   #include <esp_wifi.h>

The problem lies in the algorithm used by UECIDE to identify include-files-within-include-files which has no method for working out which should be used and which shouldn't depending on preprocessor macros.

solarJack's picture

Compiling...

Compiling... • Preprocessing... • Converting binary files • Generating linker script • Compiling sketch... • Compiling core... ‣ esp8266 • Compiling libraries... ‣ ESP_WiFiManager [/home/jack/Documents/UECIDE/libraries/ESP_WiFiManager] ‣ ESP8266WiFi [/home/jack/.uecide/libraries/Communications/esp8266/ESP8266WiFi] ‣ SafeString-1.0.5 [/home/jack/Documents/UECIDE/libraries/SafeString-1.0.5] ‣ SafeString-1.0.5 [/home/jack/Documents/UECIDE/libraries/SafeString-1.0.5] ‣ DNSServer [/home/jack/.uecide/libraries/Communications/esp8266/DNSServer] ‣ ESP8266WebServer [/home/jack/.uecide/libraries/Communications/esp8266/ESP8266WebServer] • Linking sketch... ‣ Generating bin file... Creating BIN file "/tmp/build-925944e9-072e-4a95-84e5-4c162b4576cb/nodeMCU_HotWaterCat5.bin" using "/tmp/build-925944e9-072e-4a95-84e5-4c162b4576cb/nodeMCU_HotWaterCat5.elf" ‣ Generating eep file... ‣ Generating etx file... ‣ Generating lss file... Compiling finished. Memory usage • Program size: 374,100 bytes • Memory size: 48,428 bytes • Compilation took 95.05 seconds.

U are quite an exceptional person.. give me holler anytime I might be of help.. I really like ur uecide project.. it just seems to be 'just right'.. I hope someone with some big $ will fly over and make a dump on u.. thankyou and please keep me in mind for any beta stuff..u might need if I can do it..

Awww, shucks. Thanks. It's

Awww, shucks. Thanks. It's really just my pet project, and if others find it useful then I'm happy with that. I am exploring lots of different avenues for a future version and ways to improve library management - all of which will need testing. I have a beta version in the works at the moment that has re-written much of the library handing, but I have since had other ideas (damn my strange brain) to move big chunks of IDE out of the editor and into a separate native program, which will be a lot of work, but give even more flexibility and ability to do fun things. We'll have to see where that leads me...

UECIDE started from me hating the Arduino IDE, and finding MPLAB-X (the alternative for PIC32 at the time) far too complex and heavyweight (not to mention slow). So I made my own that was in between the two - more feature rich than the Arduino IDE, but not as bulky and awkward as MPLAB-X. And it sort of grew from there.

solarJack's picture

I hope U will stay on this

I hope U will stay on this UECIDE project and keep refining it..In my opinion, there is a perfect place for such a work.. somewhere between arduino entry level ide and alien spacecraft platformio..

I think one big un-avoidable problem is that all these wifi 'libraries' written by various different authors each have their own rendering of code.. U almost need some kind of supervisory 'wrapper' invoked overlooking each 'library' as it is added to the compile stream.. I could be wrong.. hey.. I hope u keep working on this project.. the visual is right on..and u have added many working click shortcuts-- excellant.. rock on..

Pages