Tcl.h:没有这样的文件或目录

问题描述 投票:0回答:4

我正在尝试将一些代码从 Solaris 机器移植到 Linux(特别是 Redhat)机器上。代码编译没有问题,在 Solaris 机器上运行也没有问题。

但是,在 Linux 上重新编译时,我遇到了 tcl.h 的问题 - 编译器告诉我

error: tcl.h: No such file or directory
对于多个文件,
#include "tcl.h"

据我所知,tcl8.4 和 tk8.4 均已安装:

  • /usr/lib/tcl8.4
  • /usr/share/tcl8.4
  • /usr/lib/tk8.4
  • /usr/share/tk8.4

但是,我在任何地方都找不到 tcl.h。有谁知道它会在哪里?或者它是 Solaris 需要但 Linux 不需要包含的文件之一?或者除了 tcl/tk 8.4 之外我还需要安装其他东西吗?

c++ tcl
4个回答
11
投票

您需要安装development包才能获取头文件。根据您的 Linux 发行版,查找名为

tcl8.4-dev
tk8.4-dev
的软件包。


6
投票

听起来您没有安装 tcl 的开发文件(库通常与标头分开打包)。尝试:

$ rpm -qa | grep tcl

如果不存在,请找到 -devel 软件包进行安装。如果是,则它可能位于编译器未包含的目录中。如果安装了,应该可以找到rpm的文件(我觉得选项是

-ql <packagename>


0
投票
sudo dnf makecache
sudo dnf install tcl-devel.x86_64
rpm -qa |grep tcl

0
投票

之前的所有答案都不适用于

docker
图像,例如对于
ubuntu
php
。解决办法如下:

from php:7.3.30-apache-bullseye
RUN apt-get update && apt-get install -qq tcl tcl-dev tk tk-dev
RUN apt-get install -qq expect expect-dev git

# TO INSTALL EXPECT YOU NEED TO REPLACE 100500 PACKAGES #
# SINCE UBUNTU WENT MAD LOL #
WORKDIR /usr/include
RUN git clone https://github.com/christophchamp/expect.git expect_builder && \
    cp -r expect_builder/* . && \
    cp -r tcl/* .

WORKDIR /usr/include/expect_builder
# replace with ./configure --build=x86_64-unknown-linux-gnu for x86 #
RUN ./configure --build=aarch64-unknown-linux-gnu && \
    make && \
    cp libexpect5.45.1.so /usr/lib/libexpect.so && \
    cp expect /usr/lib/expect


RUN pecl install expect
RUN echo "extension=expect" >> "$PHP_INI_DIR/php.ini-production" && \
    mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

WORKDIR /var/www/html
COPY src/ /var/www/html/

# export ports #
EXPOSE 80

# update flag #
RUN echo 'user_flag:FLAG{...}' >> /etc/passwd

# change user #
USER www-data

问题

debian 和 ubuntu 不会将

tcl
安装到
usr/include
位置,而是安装在
usr/include/tcl
内部。要解决此问题,您可以将所有文件复制到
usr/include
。但它只能解决问题的第一部分,因为
apt-get install expect
不安装任何头文件。为了解决这部分问题,我找到了以下 repo ,它基本上是旧
expect
源的分支。您可以克隆它、解压并配置/制作。之后,您必须将其放置到正确的位置。

© www.soinside.com 2019 - 2024. All rights reserved.