當我使 Makefile 一切正常時,我在目錄 dir 中得到一個庫。當我運行“Make test”時,我得到了一個我想要運行的測驗檔案。但是當我想運行這個檔案時,我得到了這個奇怪的錯誤:./programma:加載共享庫時出錯:libprogramma.so:無法打開共享物件檔案:沒有這樣的檔案或目錄。我曾嘗試在 WSL 和 Linux 上運行該程式,但沒有什么能讓這個錯誤消失。誰能幫我?
在這里,我有生成庫和可執行檔案的 Makefile:
INC_DIR = include
SRC_DIR = src
SOURCES = $(sort $(shell find $(SRC_DIR) -name '*.cc'))
OBJECTS = $(SOURCES:.cc=.o)
DEPS = $(OBJECTS:.o=.d)
TARGET = programma
CXX = g
CFLAGS = -Wall -Wextra -Wpedantic -std=c 11
CPPFLAGS = $(addprefix -I, $(INC_DIR))
.PHONY: all clean debug release
release: CFLAGS = -O3 -DNDEBUG
release: all
debug: CFLAGS = -O0 -DDEBUG -ggdb3
debug: all
all: $(TARGET)
clean:
rm -f $(OBJECTS) $(DEPS) lib/*.so programma *.d
$(TARGET): $(OBJECTS)
$(CXX) $(CFLAGS) $(CPPFLAGS) -fPIC -shared -o lib/[email protected] $^
-include $(DEPS)
%.o: %.cc
$(CXX) $(CFLAGS) $(CPPFLAGS) -fPIC -MMD -o $@ -c $<
test:
$(CXX) $(CFLAGS) -L./lib $(CPPFLAGS) -MMD -o programma tests/main.cc -l$(TARGET)
uj5u.com熱心網友回復:
Linux 上的可執行檔案不會在它們所在的目錄中查找共享庫,至少在默認情況下是這樣。
您可以在鏈接時通過傳遞來修復它-Wl,-rpath='$ORIGIN',或者在運行時通過將LD_LIBRARY_PATHenv 變數設定為包含庫的目錄。( LD_LIBRARY_PATH=path/to/lib ./programma)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486129.html
上一篇:映射物件陣列僅適用于陣列的副本
下一篇:如何使用fmt列印字符向量?
