ฉันจะรวมเส้นทางไปยังไลบรารีใน g ++ ได้อย่างไร


96

ฉันพยายามรวมเส้นทางไปยังไลบรารีเพิ่มเติมใน makefile ของฉัน แต่ฉันไม่สามารถหาวิธีทำให้คอมไพเลอร์ใช้เส้นทางนั้นได้ จนถึงตอนนี้ฉันมี:

g++ -g -Wall testing.cpp fileparameters.cpp main.cpp -o test

และฉันต้องการรวมเส้นทางไป

/data[...]/lib

เนื่องจาก testing.cpp มีไฟล์จากไลบรารีนั้น นอกจากนี้ฉันใช้เครื่อง linux

แก้ไข: ไม่ใช่เส้นทางไปยังห้องสมุด เฉพาะกับไฟล์ที่รวมอยู่ ความผิดฉันเอง.


คำตอบ:


175

ในการระบุไดเร็กทอรีเพื่อค้นหาไลบรารี (ไบนารี) คุณเพียงแค่ใช้-L:

-L/data[...]/lib

ในการระบุชื่อไลบรารีจริงคุณใช้-l:

-lfoo  # (links libfoo.a or libfoo.so)

ในการระบุไดเร็กทอรีเพื่อค้นหาไฟล์รวม (แตกต่างจากไลบรารี!) ให้คุณใช้-I:

-I/data[...]/lib

ดังนั้นฉันคิดว่าสิ่งที่คุณต้องการคืออะไร

g++ -g -Wall -I/data[...]/lib testing.cpp fileparameters.cpp main.cpp -o test

แฟล็กคอมไพเลอร์เหล่านี้ (รวมถึงแฟล็กอื่น ๆ ) สามารถพบได้ในคู่มือ GNU GCC Command Options:


4
โดยทั่วไปก่อนที่จะจำเป็น -Iควรจะมาก่อนชื่อไฟล์ .cpp ตัวอย่างเช่น
Ernest Friedman-Hill

1
เป็นไปได้หรือไม่ที่จะทำให้คอมไพเลอร์มีฟิกูร์เช่นเพิ่มไลบรารีลงในตัวแปรระบบ
Fred

5
@ เฟรดใช่ g ++ เข้าใจตัวแปรสภาพแวดล้อมทั้งหมดที่สามารถใช้เพื่อควบคุมเส้นทางรวมเส้นทางไลบรารีและอื่น ๆ
Ernest Friedman-Hill

1
อะไรคือความแตกต่างระหว่าง -L และ -I (ทุน i ไม่ใช่ L ต่ำกว่า)
Youda008

1
@ Youda008 Capital ell: เส้นทางการค้นหาห้องสมุด Capital eye: เส้นทางการค้นหารวมไฟล์ Small ell: ชื่อไลบรารีที่จะเชื่อมโยง
Ernest Friedman-Hill

2

ใน MakeFile หรือ CMakeLists.txt ของคุณคุณสามารถตั้งค่า CMAKE_CXX_FLAGS ดังต่อไปนี้:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/path/to/your/folder")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.