AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

Perguntas[compiling](unix)

Martin Hope
Alexandre Georges
Asked: 2024-01-24 06:11:13 +0800 CST

ADCIRC - Não é possível encontrar -lhdf5_fortran: Esse arquivo ou diretório não existe

  • 6

Tentando compilar o ADCIRC, um programa Fortran com suporte NetCDF, e encontrei o seguinte erro.

/usr/bin/ld: cannot find -lhdf5_fortran: No such file or directory

collect2: error: ld returned 1 exit status

Estou um pouco confuso sobre qual arquivo ele está procurando, pois não consegue encontrar nenhum arquivo chamado lhdf5_fortran.

Eu tenho as bibliotecas libhdf5-dev e libhdf5-fortran-102 instaladas. Estou usando o Ubuntu.

compiling
  • 1 respostas
  • 24 Views
Martin Hope
tuxbud
Asked: 2023-08-07 12:30:36 +0800 CST

Existe uma maneira de compilar o KNOPPIX a partir da fonte?

  • 5

Em vez de baixar o ISO, existe uma maneira de baixar todos os pacotes de origem e compilá-los localmente?

Me deparei com a seguinte URL https://knopper.net/knoppix-sources/ e gostaria de saber se é possível de alguma forma baixar tudo e compilar tudo em sequência localmente.

compiling
  • 1 respostas
  • 27 Views
Martin Hope
Ahmed Moselhi
Asked: 2023-04-12 05:49:08 +0800 CST

erro de compilação vulkan: 'createResultValue' não é membro de 'vk'

  • 6

Estou tentando compilar um programa que usa vulkan hpp e usa um método em um arquivo chamado vulkan_driver.h assim:

// Evaluate f and if result is not a success throw proper vk exception.
#define CHECK_VK_RESULT(x) do { \
   vk::Result res = vk::Result(x); \
   int tmp = 0; \
   vk::createResultValue(res, tmp, __FILE__ ":" TOSTRING(__LINE__)); \
} while (0)

quando compilo recebo o seguinte erro:

[  199s] In file included from /home/abuild/rpmbuild/BUILD/decaf-emu-20220508T212126/src/libgpu/src/vulkan/vulkan_driver.cpp:2:
[  199s] /home/abuild/rpmbuild/BUILD/decaf-emu-20220508T212126/src/libgpu/src/vulkan/vulkan_driver.cpp: In member function 'void vulkan::Driver::initialise(vk::Instance, vk::PhysicalDevice, vk::Device, vk::Queue, uint32_t)':
[  199s] /home/abuild/rpmbuild/BUILD/decaf-emu-20220508T212126/src/libgpu/src/vulkan/vulkan_driver.h:36:8: error: 'createResultValue' is not a member of 'vk'; did you mean 'createResultValueType'?
[  199s]    36 |    vk::createResultValue(res, tmp, __FILE__ ":" TOSTRING(__LINE__)); \
[  199s]       |        ^~~~~~~~~~~~~~~~~
[  199s] /home/abuild/rpmbuild/BUILD/decaf-emu-20220508T212126/src/libgpu/src/vulkan/vulkan_driver.cpp:89:4: note: in expansion of macro 'CHECK_VK_RESULT'
[  199s]    89 |    CHECK_VK_RESULT(vmaCreateAllocator(&allocatorCreateInfo, &mAllocator));
[  199s]       |    ^~~~~~~~~~~~~~~
[  199s] make[2]: *** [src/libgpu/CMakeFiles/libgpu.dir/build.make:647: src/libgpu/CMakeFiles/libgpu.dir/src/vulkan/vulkan_driver.cpp.o] Error 1

Como posso corrigir esse erro?

compiling
  • 1 respostas
  • 20 Views
Martin Hope
Joff
Asked: 2022-11-23 04:40:04 +0800 CST

Como fornecer o caminho da biblioteca para o script ./configure

  • 6

Eu estava tentando instalar uma biblioteca chamada Openslide que falhou durante a ./configureetapa porque não conseguiu encontrar uma dependência ( libjpeg ).

Eu pensei em continuar a construir o libjpeg e, em seguida, fornecer manualmente o local da biblioteca para ./configurefazê-lo funcionar. Depois de construir libjpeg em ~/libjpeg, pensei que poderia apenas adicionar ~/libjpeg/libcolocando LD_LIBRARY_PATHo seguinte em meu bashrc e re-sourcing dele LD_LIBRARY_PATH=~/libjpeg/lib:$LD_LIBRARY_PATH.

Isso não funcionou e libjpeg ainda não pôde ser encontrado pelo ./configurescript no Openslide. Comecei a procurar respostas online, uma sugestão foi tentar, ./configure --with-libjpeg=~/libjpeg/libque também falhou.

Acabei desistindo e apenas fiz um sudo apt install, mas ainda estou curioso para saber por que não pude fornecer manualmente a localização da biblioteca. Existe uma maneira correta de fazer isso?

compiling
  • 1 respostas
  • 22 Views
Martin Hope
Franc
Asked: 2022-06-24 06:49:06 +0800 CST

O arquivo de configuração em /boot tem alguma função além de uma informação sobre a presença dos módulos?

  • 0

O .configarquivo in /boottem algum papel além de uma informação sobre a presença dos módulos? Uma .configXXXXárvore de origem do kernel linux é usada ao construir o kernel para LIGAR/DESLIGAR um recurso. Mas depois de instalar qual é o seu papel /boot?

linux-kernel compiling
  • 2 respostas
  • 29 Views
Martin Hope
Rafaelo
Asked: 2022-06-04 13:45:31 +0800 CST

make && echo "hello" só imprime hello quando make for bem sucedido (kernel)

  • 0

Para compilar o kernel linux, se eu fizer

make_runner.sh && echo "hello"

ele imprime olá mesmo se alguma compilação do kernel falhar.

Existe uma maneira de imprimir apenas se todos os destinos de compilação forem criados corretamente?

Onde make_runner.shestá o seguinte:

#!/usr/bin/env bash
set -xe
make O=out ARCH=arm64 CC=clang CLANG_TRIPLE=aarch64-linux-gnu- vendor/citrus-perf_defconfig
make O=out ARCH=arm64 CC=clang CLANG_TRIPLE=aarch64-linux-gnu- -j$(nproc --all) 2>&1 | tee kernel.log
kernel compiling
  • 1 respostas
  • 62 Views
Martin Hope
jiwopene
Asked: 2022-05-14 04:57:33 +0800 CST

Refaça o makefile incluído apenas quando necessário

  • 2

Digamos que eu tenha um Makefile que tenha dois destinos “principais”: foo.oe clean. O primeiro tem uma receita para criar o foo.oarquivo. O último remove todos os arquivos temporários.

Para remover a necessidade de especificar as dependências foo.omanualmente, tenho um target foo.dque é um makefile válido especificando as dependências no formato foo.o foo.d : dep1 dep2 depn. Este arquivo de dependência está incluído no makefile.

O makefile fica assim:

;; This buffer is for text that is not saved, and for Lisp evaluation.
;; To create a file, visit it with C-x C-f and enter text in its buffer.

foo.o: foo.c
    cc -c -o $@ $<

foo.d: foo.c
    sh deps.sh $< > $@

include foo.d

.PHONY: clean
clean:
    rm …

Quando eu quero fazer foo.o, tudo funciona corretamente: foo.dobtém (re)feito, é incluído e foo.oé feito. O problema é que quando eu quero fazer o cleanalvo, foo.dfica incluso, ou até mesmo feito.

Como posso evitar fazer incluindo foo.dquando o cleanalvo está sendo feito? (Ou, como incluir isso apenas quando foo.ofor feito?)

A solução pode usar recursos do GNU Make.

compiling make
  • 1 respostas
  • 25 Views
Martin Hope
Stefan Scherfke
Asked: 2022-04-26 03:29:21 +0800 CST

O arquivo .so existente não pode ser carregado mesmo que exista, parece depender do sistema operacional do host do Docker

  • 2

Eu construí o Qt6 em um contêiner do Docker baseado no Alma8, com o host do Docker sendo o Fedora 35.

Sob algumas circunstâncias (descritas abaixo), todas as bibliotecas Qt não podem carregar arquivos libQt6Core.so[.6[.2.4]]. Mas esse arquivo existe e o diretório correto é pesquisado para esse arquivo. Outras bibliotecas Qt (por exemplo, libQt6Dbus.so) são encontradas e carregadas.

Extensa depuração, reconstrução, pesquisa na web não forneceu nenhuma pista sobre qual é a causa subjacente e como eu poderia corrigi-la.

Localizando o problema

Eu reduzi o problema para o seguinte cenário:

  • Criei duas VMs mínimas, uma com centos7 e outra com alma8.
  • Instalei o Docker dos repositórios oficiais em ambos.
  • Executei a mesma imagem do Docker em ambas as VMs e instalei o mesmo pacote qt6.
  • Ele quebra quando o host do Docker é centos7.
  • Funciona quando o host do Docker é alma8.

Teoria e pergunta

  • O Qt6 foi construído no Alma8 e links para algumas bibliotecas de sistema mais recentes do que o Centos7 fornece, então o Qt6 não pode ser executado no Centos7 (isso é totalmente esperado e correto). Mas deve ser executado em qualquer lugar no contêiner Alma8 Docker.
  • As imagens de contêiner devem poder ser executadas em qualquer lugar, mas, neste caso, "algo" do sistema operacional host se infiltra no contêiner e causa o problema - mesmo que ambos os contêineres usem exatamente a mesma imagem!

A questão é: O que é esse "algo" e como/por que ele quebra a compilação?

O que eu tentei

Eu inspecionei libQt6Gui.sopara ver se ele pode ou não carregar libQt6Core.soe inspecionei libQt6Core.sopara ver se algo parece falso usando:

  • ldde LD_DEBUG=libs lddque de fato mostrou algumas diferenças (veja abaixo)
  • libtree que não mostrou diferenças (mas uma bela árvore :))
  • pyldd (de conda-build)
  • readelf -d

O que eu também tentei:

  • Configuração LD_LIBRARY_PATH(não mudou nada - nenhuma surpresa, pois sei que o caminho correto é sempre pesquisado)
  • Construindo o Qt6 em um contêiner alma8 com um host centos7 (falha na compilação com " libQt6Core.so.6: cannot open file", mesmo erro que com a biblioteca construída)
  • Construindo o Qt6 em um contêiner centos7 (falha na compilação devido a outros problemas que ainda não consegui corrigir)

Diferenças deldd

Nas capturas de tela abaixo, você vê o Alma8-Docker-Container em um host Centos7 à esquerda e o Alma8-Docker-Container em um host Alma8 à *direita.

As duas primeiras imagens mostram os resultados para ldd /opt/emsconda/lib/libQt6Gui.so. libQt6Corenão pode ser encontrado à esquerda, mas é encontrado à direita.

insira a descrição da imagem aqui

Esta segunda captura de tela mostra que outras bibliotecas do Qt foram encontradas e carregadas. As bibliotecas ICU também estão faltando à esquerda - talvez elas sejam carregadas apenas quando a libQt6Core também foi carregada?

insira a descrição da imagem aqui

Esta captura de tela mostra os resultados do LD_DEBUG=libs ldd .... Você pode ver que em ambos os casos, libQt6Coreestá pesquisando no local correto ( /opt/emsconda/lib). Mas só é carregado no recipiente certo. O da esquerda também procura em `/opt/emsconda/lib/./ (haha)) e então caminha silenciosamente para a próxima biblioteca ...

Não consegui encontrar nenhuma mensagem de erro. Este arquivo simplesmente não é aberto/carregado.

insira a descrição da imagem aqui

Inspecionar o libQt6Core.sopróprio pode nos dar uma pista. Ele liga a um linux-vdso.so.1.

De acordo com esta pergunta SO , esse arquivo é uma biblioteca virtual injetada no espaço do usuário pelo kernel do sistema operacional.

Como os contêineres do Docker não executam seu próprio kernel, suspeito que esse arquivo venha do sistema operacional host. Talvez, libQt6Coredependa de alguma funcionalidade no linux-vdso.so.1que o kernel centos7 não pode fornecer? Eu não faço ideia ... insira a descrição da imagem aqui


Como nada que tentei até agora gera uma mensagem de erro, não tenho ideia de qual pode ser o problema real ou como proceder com a depuração. Eu ficaria grato por qualquer tipo de dicas, dicas ou ajuda.

compiling docker
  • 1 respostas
  • 367 Views
Martin Hope
Seamus
Asked: 2022-04-10 14:47:52 +0800 CST

Como definir um novo número de versão em um pacote .deb que criei

  • 1

Acabei de concluir uma modificação e reconstrução simples do código-fonte em uma máquina Raspberry Pi OS - bullseye. Como isso é novo para mim, vou listar as etapas que segui em um esforço para evitar ambiguidade:

$ dhcpcd --version
dhcpcd 8.1.2                            # "before" version
$ sudo apt install devscripts           # build tools for using `debuild`
$ apt-get source dhcpcd5                # creates source tree ~/dhcpcd5-8.1.2; Debian git repo is far off!
$ cd dhcpcd5-8.1.2                      # cd to source dir
$ nano src/dhcp.c                       # make required changes to the source (one line)
~/dhcpcd5-8.1.2 $ debuild -b -uc -us    # successful build
$ cd ..
$ sudo dpkg -i dhcpcd5_8.1.2-1+rpt5_armhf.deb # install .deb file created by debuild
$ dhcpcd --version
dhcpcd 8.1.2                            # "after" version
$ 

Tudo bem, mas os números de versão "antes" e "depois" são exatamente os mesmos, o que me deixa sem uma maneira simples de saber se tenho meu código corrigido em execução ou o código não corrigido . Vou instalar o arquivo .deb corrigido em vários hosts, posso receber solicitações de outros, etc, então gostaria de alguma maneira de distinguir facilmente o código corrigido do não corrigido .

Usando dhcpcd --versionparece uma maneira fácil de fazer isso. Eu li que o Debian tem regras sobre números de versão, mas como não estou liberando isso para "o mundo", não vejo necessidade de formalidade. Além disso - enviei uma solicitação de pull/merge para o repositório Debian e avisei a organização RPi sobre o problema. Não recebi nenhum feedback de nenhuma das partes, mas esse bug é um grande aborrecimento para mim. Não desejo esperar por um novo lançamento dhcpcdcom um número de versão "adequado".

O que devo fazer para que a versão corrigidadhcpcd de reporte dhcpcd 8.1.2.1- ou algo semelhante?

EDIT para esclarecimento:

Com base nessa resposta , editei dhcpcd5-8.1.2/debian/changelog. Após essa alteração, os aptutilitários relatam consistentemente a versão de dhcpcdcomo 8.1.3:

$ apt-cache policy dhcpcd5
dhcpcd5:
  Installed: 1:8.1.3-1+rpt1
  Candidate: 1:8.1.3-1+rpt1
  Version table:
 *** 1:8.1.3-1+rpt1 100
        100 /var/lib/dpkg/status
     1:8.1.2-1+rpt1 500
        500 http://archive.raspberrypi.org/debian buster/main armhf Packages
     7.1.0-2 500
        500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
$ #
$ dpkg -s dhcpcd5 | grep Version
Version: 1:8.1.3-1+rpt1 
$

No entanto: dhcpcd --versionainda relata 8.1.2. dhcpcdé alias dhcpcd5em /etc/alternatives. Consequentemente, dhcpcd --versioné na verdade dhcpcd5 --version. Parece que o executável estádhcpcd5 recebendo --versionde uma fonte diferente dos aptutilitários.?

EDIÇÃO 2:

Acontece que a versão # que é relatada por dhcpcd --versioné definida da defs.hseguinte forma:

#define PACKAGE                 "dhcpcd"
#define VERSION                 "8.1.2"

Eu acho que dhcpcd é um pouco outlier . A equipe do RPi aparentemente decidiu renunciar à versão upstream 9 quando lançada (anos atrás), e manteve a versão 8.1.2, embora houvesse vários lançamentos upstream após a versão 8.1.2. Ainda mais confuso é o fato de que o .dscarquivo lista Vcs-Browser: https://salsa.debian.org/smlx-guest/dhcpcd5como o repositório Git - mas na verdade está preso na versão 7. Isso não faz muito sentido para mim - acho que é uma das razões pelas quais não sou um mantenedor de pacotes. :)

debian compiling
  • 1 respostas
  • 318 Views
Martin Hope
Maxime B.
Asked: 2022-03-16 02:50:49 +0800 CST

Não é possível compilar o módulo do Kernel com KBUILD_CFLAGS_MODULE

  • 1

Estou tendo problemas para compilar os módulos do kernel KBUILD_CFLAGS_MODULEcom o novo kernel. O compilador me mostra um erro estranho. Essas compilações costumavam funcionar com meu kernel mais antigo (5.5), mas não funcionam mais com meu kernel 5.16.

Aqui está um exemplo reproduzível mínimo:

Módulo fictício:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int __init lkm_example_init(void) {return 0;}
static void __exit lkm_example_exit(void){}
module_init(lkm_example_init);
module_exit(lkm_example_exit);

Makefile:

TARGET ?= test
obj-m += ${TARGET}.o
KBUILD_CFLAGS_MODULE := "-O1" "-mcmodel=medium" # Examples
.PHONY: all
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Se eu comentar a KBUILD_CFLAGS_MODULElinha, meu trabalho de construção.

No entanto, se não comentada, minha compilação falha com esta mensagem de erro:

make TARGET=test 
make -C /lib/modules/5.16.0/build M=/home/user/test modules
make[1]: Entering directory '/home/user/linux'
  CC [M]  /home/user/test/test.o
In file included from ./include/linux/module.h:22,
                 from /home/user/test/test.c:2:
./include/linux/module.h:183:39: error: expected ',' or ';' before 'KBUILD_MODFILE'
  183 | #define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
      |                                       ^~~~~~~~~~~~~~
./include/linux/moduleparam.h:26:47: note: in definition of macro '__MODULE_INFO'
   26 |   = __MODULE_INFO_PREFIX __stringify(tag) "=" info
      |                                               ^~~~
./include/linux/module.h:183:21: note: in expansion of macro 'MODULE_INFO'
  183 | #define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
      |                     ^~~~~~~~~~~
./include/linux/module.h:230:34: note: in expansion of macro 'MODULE_FILE'
  230 | #define MODULE_LICENSE(_license) MODULE_FILE MODULE_INFO(license, _license)
      |                                  ^~~~~~~~~~~
/home/user/test/test.c:4:1: note: in expansion of macro 'MODULE_LICENSE'
    4 | MODULE_LICENSE("GPL");
      | ^~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:287: /home/user/test/test.o] Error 1
make[1]: *** [Makefile:1846: /home/user/test] Error 2
make[1]: Leaving directory '/home/user/linux'
make: *** [Makefile:6: all] Error 2

Você sabe qual pode ser a causa raiz desse problema?

linux-kernel compiling
  • 1 respostas
  • 241 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve