Custom Static Library (.a lib) not found when building MakeFile for C++ Linux project

47 Views Asked by At

I have a custom library I made called AceLibraryLinux and I'm trying to use it in a C++ Linux program I made called RumPi (Raspberry Pi application I'm making). The .a file is called "AceLibraryLinux.a" however, the make file is not finding the lib. I tried specifying the path with -L and modifying the make build command but I havent been able to get it working. Here is a screenshot of the directory structure directory structure screenshot

And this is what the MakeFile currently looks like. LDFlags was not there originally, I tried adding it in an attempt to fix the issue so it is most likely incorrect:

CXX = g++
CXXFLAGS = -std=c++11
LDLIBS = -lwiringPi -lpthread -li2c -lAceLibraryLinux
LDFLAGS = -L. -lAceLibraryLinux -static

HEADERS = ./AceLinux.h ./Common.h Components/Headers/RumPi.h Components/Headers/Component.h Components/Headers/AnalogDigitalConverterComponent.h Components/Headers/Vehicle.h Components/Headers/Motor.h Components/Headers/Receiver.h Components/Headers/DualLED.h Components/Headers/LED.h Components/Headers/RGBLED.h Components/Headers/Relay.h Components/Headers/LCD1602.h Components/Headers/PCF8591.h Components/Headers/GasData.h Components/Headers/GasSensor.h Components/Headers/RotaryEncoder.h Components/Headers/HumiditySensor.h Components/Headers/SoundSensor.h Components/Headers/BMP180.h Components/Headers/BMP280.h Components/Headers/HCSR501.h Components/Headers/PiCamera.h Components/Headers/MCP3008.h
OBJECTS = RumPi.o Vehicle.o Motor.o Receiver.o DualLED.o LED.o RGBLED.o Relay.o LCD1602.o PCF8591.o GasData.o GasSensor.o RotaryEncoder.o HumiditySensor.o SoundSensor.o BMP180.o BMP280.o HCSR501.o PiCamera.o MCP3008.o

default: RumPi

RumPi: $(OBJECTS)
    $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@

%.o: Components/Implementations/%.cpp
    $(CXX) $(CXXFLAGS) -c -o $@ $<

$(OBJECTS): $(HEADERS)

clean:
    -rm -f $(OBJECTS)
    -rm -f RumPi
1

There are 1 best solutions below

0
Katianie On BEST ANSWER

Thanks again, as the commenters pointed out, the name on LDLIBS needed to be changed to "AceLibraryLinux.a" and I removed the LDFLAGS line since it was not necessary or being used. Here is the fixed make file:

CXX = g++
CXXFLAGS = -std=c++11
LDLIBS = -lwiringPi -lpthread -li2c AceLibraryLinux.a

HEADERS = ./AceLinux.h ./Common.h Components/Headers/RumPi.h Components/Headers/Component.h Components/Headers/AnalogDigitalConverterComponent.h Components/Headers/Vehicle.h Components/Headers/Motor.h Components/Headers/Receiver.h Components/Headers/DualLED.h Components/Headers/LED.h Components/Headers/RGBLED.h Components/Headers/Relay.h Components/Headers/LCD1602.h Components/Headers/PCF8591.h Components/Headers/GasData.h Components/Headers/GasSensor.h Components/Headers/RotaryEncoder.h Components/Headers/HumiditySensor.h Components/Headers/SoundSensor.h Components/Headers/BMP180.h Components/Headers/BMP280.h Components/Headers/HCSR501.h Components/Headers/PiCamera.h Components/Headers/MCP3008.h
OBJECTS = RumPi.o Vehicle.o Motor.o Receiver.o DualLED.o LED.o RGBLED.o Relay.o LCD1602.o PCF8591.o GasData.o GasSensor.o RotaryEncoder.o HumiditySensor.o SoundSensor.o BMP180.o BMP280.o HCSR501.o PiCamera.o MCP3008.o

default: RumPi

RumPi: $(OBJECTS)
    $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@

%.o: Components/Implementations/%.cpp
    $(CXX) $(CXXFLAGS) -c -o $@ $<

$(OBJECTS): $(HEADERS)

clean:
    -rm -f $(OBJECTS)
    -rm -f RumPi