Điểm:0

Lý do lỗi cmake khi sử dụng tiêu đề freetype2 là gì?

lá cờ pr

tôi xây dựng đơn giản gfw, vui vẻ project on vs code thành công. vấn đề của tôi là Tôi thêm tiêu đề <freetype2/ft2build.h> vào dự án của mình và tôi thực hiện các lệnh đó trong thư mục dự án của mình:

sudo su
xây dựng đĩa cd
cmake..
chế tạo

bình thường mà hoạt động mà không có lỗi.

tôi nhận được lỗi gọi là:

    Trong tệp được bao gồm từ /home/gomi/Documents/ubuntuProject/main.c:3:
    /usr/include/freetype2/ft2build.h:39:10: lỗi nghiêm trọng: freetype/config/ftheader.h: Không có tệp hoặc thư mục như vậy
       39 | #include <freetype/config/ftheader.h>
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ Quá trình biên dịch đã kết thúc.

Tôi đã đi đến đường dẫn usr/include/freetype2 từ thiết bị đầu cuối. Nếu tôi nhớ không nhầm thì tôi chỉ thấy ft2build.h trong thư mục không có thư mục cấu hình nào khác. Tôi đã tải xuống các tệp freetype2 và tôi đã sao chép thư mục freetype vào thư mục này và tôi cũng gặp lỗi tương tự. Cuối cùng, tôi đã xóa thư mục freetype đã sao chép. Tôi không chắc họ đã ở đó chưa và tôi đã làm hỏng freetype2.

Tôi nên làm gì?

Knud Larsen avatar
lá cờ by
Danh sách tệp 18.04 https://packages.ubuntu.com/bionic/amd64/libfreetype6-dev/filelist .... Danh sách tệp 20.04 https://packages.ubuntu.com/focal/amd64/libfreetype-dev/filelist
mchid avatar
lá cờ bo
Bạn không nên sử dụng `sudo` hoặc root cho `cmake` hoặc `make`.Bạn chỉ cần quyền root cho phần cài đặt của quy trình. Nếu bạn đã sử dụng quyền root để thử và xây dựng, điều tốt nhất nên làm là bắt đầu lại, xóa thư mục và tải xuống lại nguồn để bắt đầu mới. Ngoài ra, bạn có thể thử chạy `Sudo make clean` nhưng không đảm bảo cách này sẽ hoạt động.
lá cờ pr
vâng bạn đúng @mchid, bằng cách nào đó tôi đã viết nó được bảo vệ ghi khi lần đầu tiên tôi làm. Tại thời điểm này, tôi đã xóa nội dung của bản dựng rồi xây dựng lại. Nếu không trở thành root bây giờ mà xây dựng. Tuy nhiên, vấn đề tiêu đề kỳ lạ này vẫn còn.
lá cờ pr
đây là một vấn đề tương tự: https://stackoverflow.com/questions/34910660/fatal-error-freetype-config-ftheader-h
Điểm:0
lá cờ bo

Như tôi đã nói, bạn không nên chạy cmakechế tạo với quyền root nhưng đó dường như là một vấn đề khác.

Đối với vấn đề của bạn, trước tiên hãy xóa tệp bạn đã thêm theo cách thủ công. Sau đó, bạn có thể cài đặt gói sau để khắc phục sự cố:

cập nhật sudo apt
cài đặt sudo apt --reinstall libfreetype6-dev

Bạn có thể định vị các tệp như thế này bằng cách sử dụng tập tin apt chỉ huy.

cập nhật sudo apt
Sudo apt cài đặt tệp apt
cập nhật tập tin sudo apt
tìm kiếm tệp apt ftheader.h

Điều này sẽ trả về gói chứa tệp bạn cần.

Điểm:0
lá cờ pr

Sau khi tìm kiếm hàng giờ. Tôi nghĩ rằng tôi đã tìm thấy nó. Đầu tiên, nó cố gắng tìm kiếm nó trong thư mục sai trừ khi bạn bảo nó với cmake.

Tôi tìm thấy nó trên trang này: https://techoverflow.net/2019/06/11/how-to-fix-ft2build-h-no-such-file-or-directory/

  1. Tôi vừa thêm vào các thư mục bao gồm của mã /usr/bao gồm/freetype2

  2. tôi đặt tiêu đề #include <ft2build.h>FT_FREETYPE_H ngay sau nó, với tôi C chính tập tin.

  3. tôi đã sử dụng pkg-config --cflags freetype2 lệnh để đảm bảo vị trí của nó -I/usr/bao gồm/freetype2

  4. tôi đã đi đến CMakeLists.txt tập tin sau đó tôi đã thêm bao gồm_thư mục (/ usr/bao gồm/freetype2) dòng. Tệp CMakeLists.txt cuối cùng trông như thế này:

    cmake_minimum_required(PHIÊN BẢN 3.20.3)
    
    dự án(gomi)
    
    bao gồm_thư mục (/ usr/bao gồm/freetype2)
    
    add_executable(${PROJECT_NAME} vui mừng.c main.c)
    
    target_link_libraries(${PROJECT_NAME} GL dl glfw)
    
  5. Lệnh của tôi để xây dựng lại nó:

    cd ../ # một gói đường dẫn từ thư mục bản dựng)
    rm -r build/* # xóa tất cả các tệp trong bản dựng)
    xây dựng đĩa cd
    cmake..
    chế tạo
    ./myprogramname # chạy
    
lá cờ hr
Có lẽ bạn nên sử dụng `find_package` và sau đó đặt `target_include_directories` với giá trị `FREETYPE_INCLUDE_DIRS` đã tìm thấy, thay vì mã hóa cứng `include_directories (/usr/include/freetype2)` (đó là điểm quan trọng của `cmake` - để xác định vị trí mọi thứ theo cách bất khả tri của hệ thống). Xem ví dụ [Liên kết freetype với cmake](https://stackoverflow.com/a/23888557/4440445)
lá cờ pr
@steeldriver Cảm ơn bạn, tôi đã sửa đổi phù hợp. Tôi chỉ không sử dụng SET(CMAKE_CXX_FLAGS "-O2 -std=c++11") phần còn lại hoạt động mà không gặp vấn đề gì.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.