Como posso compilar o código objeto para o sistema errado e pergunta compilação cruzada?

StackOverflow https://stackoverflow.com/questions/1261472

  •  12-09-2019
  •  | 
  •  

Pergunta

esta questão sobre a compilação. Eu não entendo como o meu programa para Mac pode usar o -arch direita, compilar com essas bandeiras -arch, as bandeiras -arch ser para o sistema que eu estou no (a g5 ppc64), e ainda produzir o código objeto errado.

Além disso, se eu usei um compilador cruzado e estava em Linux, produziu 10,5 código para mac, como isso seria diferente do que o que eu descrevi acima?

Fundo é que eu tentei compilar vários módulos apache. Eles compilar com a ppc -arch, ppc64, etc. eu recebo nenhum erro e eu recebo meu mod_whatever.so. Mas, apache sempre se queixam de que algum símbolo não foi encontrado. Aparentemente, ele tem a ver com o que o compilador produz, mesmo que o tipo de arquivo diz que é para ppc, ppc64, i386, x_64 (binário universal) e parece corresponder a todos os outros mods .so que eu tenho.

Eu acho que eu não entendo como ele poderia compilar para o meu sistema sem nenhum problema e, em seguida, dizer que o meu sistema não pode usá-lo. Talvez eu não entendo o que um compilador é realmente me dando.

EDIT: Todas as mensagens de erro e o processo completo pode ser visto aqui .

Obrigado.

Foi útil?

Solução

Olhando para o outro segmento e em outros lugares e sem um G5 ou instalação OSX Server, só posso fazer alguns comentários e sugestões, mas talvez eles vão ajudar.

  1. Geralmente não é uma boa idéia para ser modificar o / software instalado s fornecedor de. A instalação de um novo módulo do Apache é menos problemática do que, digamos, substituindo uma biblioteca existente, mas você ainda está à mercê do fornecedor em que a Atualização de Software pode excluir suas modificações e, além disso você tem que descobrir como a versão do fornecedor foi construído em primeiro lugar. Uma prática comum no mundo OS X é evitar isso através de uma instalação completamente separada de um produto de código aberto, como o Apache, usando, por exemplo, MacPorts . Que tem seus contras, também: para atingir um alto nível de independência, MacPorts, muitas vezes, baixar e construir um monte de pacotes dependentes para as coisas que já estão em OS X, mas não há mal nenhum em que diferente de alguns ciclos de compilação extra e espaço em disco .

  2. Dito isso, deve ser possível para construir e instalar o Apache módulos para complementar os fornecidos pela Apple. Apple faz publicar as alterações feitas por ele para produtos de código aberto aqui ; você pode se aprofundar nas várias versões lá para encontrar o diretório apache que contém a fonte, Makefile e patches aplicados. Isso pode ser de ajuda.

  3. Certifique-se de que o mod _ *. De modo a construir são verdadeiramente de 64 bits e não dependem de quaisquer bibliotecas bit não-64. Use otool -L mod_*.so para ver as bibliotecas dinâmicas que cada referências e, em seguida, usar file nessas bibliotecas para garantir que todos eles têm ppc64 variantes.

  4. Certifique-se de que você está usando ferramentas de desenvolvimento up-to-date (Xcode 3.1.3 é atual).

  5. Enquanto a cadeia de ferramentas desenvolvedor usa muitos componentes de código aberto, a Apple tem melhorado muitos deles e há grandes diferenças em ABIs do OS X, suporte binário universal, bibliotecas dinâmicas, etc. A linha inferior é que cross-compilação de código OS X-alvo objeto no Linux (ou qualquer outra plataforma não-OS X) não é suportado nem prático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top