Kompilacja w DJGPP i NASM.

0

Witam

Jak kompilować program składający się przykładowo z kilku plików .asm i kilku plików .c i .h (+biblioteki)? Posiadam już kompilatory DJGPP i NASM tylko nie potrafię ich obsłużyć, żeby kompilowały do np pliku .bin i jak to zlinkować razem z bibliotekami. :)

PS. Jak dodać np ścieżki folderów z plikami ***.lib, .h, .dll do linkera np. "A-Link" lub "ld" tak jak się to robi w IDE?

Btw. Pogrubiłem rozszerzenia plików i nazwy, żeby były bardziej zauważalne :).

1

Jak kompilować program składający się przykładowo z kilku plików .asm i kilku plików .c i .h (+biblioteki)?

Kompilacja NASM:

nasm -f coff foo.asm -o foo.o

Kompilacja GCC:

gcc -c bar.c -o bar.o

Linkowanie:

gcc foo.o bar.o -o foobar.exe

Btw. Pogrubiłem rozszerzenia plików i nazwy, żeby były bardziej zauważalne

Używaj backticków (klawisz nad Tabem), to będzie wyróżnione tak jak w tym zdaniu.

0

A jak podać foldery z plikami .lib i jak załączać konkretne pliki .lib oraz z plikami .h i .c tak jak się to robi w linkerze IDE np. C::B albo DevC++?

0

Dosyć słabo rozumiem to po angielsku, ale nie rozumiem wcale zasady polecenia -l liblary czy tam mam podać zamiasy "liblary" ścieżkę do folderu z headerami i z includami bo gcc nie chce mi znaleźć biblioteki <stdio.h>?

2

tak podajemy nazwę biblioteki do wlinkowania: jeśli biblioteka nazywa się abc to
-labc

a tak podajemy dodatkową ścieżkę, jeśli libka znajduje się gdzieś poza standardowym katalogiem:
-Lścieżka_do_libek

bo gcc nie chce mi znaleźć biblioteki <stdio.h>?
Masz skopaną instalację, bo standardowe nagłówki musi widzieć bez podawania żadnych ścieżek.

2

Ścieżkę do libów podajesz przez -Lścieżka, ścieżkę do includów przez -Iścieżka (duze i) . Po -l (małe L) podajesz lib*nazwa_biblioteki którą chcesz linkować.

0

Jeszce mam jeden problem. Podzieliłem prosty kod, który wypisuje na ekran na pliki.
main.c

 
#include <stdio.h>
#include "func.h"

int main(void){
    func();
}

func.c

 
#include "func.h"
#include <stdio.h>

int func(void)
{
    printf( "Znaki: %c, %c\n", 'h', 68 );
    return 0;
}

func.h

 
#ifndef func_h
#define func_h

int func(void);

#endif

Gdy kompiluje func.c komendą gcc -c func.c -o func.o to pojawia się w folderze z plikami plik func.o, a gdzy kompiluje tak samo plik main.c to nie wyświetla errorów, ale plik main.o się nie pojawia.

1

Waść coś kręcisz. Specjalnie dla ciebie ściągnąłem DJ-a (tylko trzy pliki: djdev203.zip, gcc473b.zip, bnu224b.zip)

Microsoft Windows XP [Wersja 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

c:\dj>set djgpp=c:\dj\djgpp.env

c:\dj>set path=c:\dj\bin;%path%

c:\dj>gcc -v
Using built-in specs.
COLLECT_GCC=c:/dj/bin/gcc.exe
COLLECT_LTO_WRAPPER=c:/dj/bin/../libexec/gcc/djgpp/4.73/lto-wrapper.exe
Target: djgpp
Configured with: /v203/gcc-4.73/configure djgpp --prefix=/dev/env/DJDIR --disable-nls --disable-werror --enable-language
s=c,c++,fortran,objc,obj-c++,ada --enable-libquadmath-support --disable-lto --disable-build-poststage1-with-cxx
Thread model: single
gcc version 4.7.3 (GCC)

c:\dj>cd bajos

C:\dj\bajos>dir
 Wolumin w stacji C nie ma etykiety.
 Numer seryjny woluminu: 65E7-B326

 Katalog: C:\dj\bajos

2014-01-18  13:21    <DIR>          .
2014-01-18  13:21    <DIR>          ..
2014-01-18  13:21               120 func.c
2014-01-18  13:21                55 func.h
2014-01-18  13:21                75 main.c
               3 plik(ów)             250 bajtów
               2 katalog(ów)  23 931 719 680 bajtów wolnych

C:\dj\bajos>gcc -c main.c -o main.o

C:\dj\bajos>dir
 Wolumin w stacji C nie ma etykiety.
 Numer seryjny woluminu: 65E7-B326

 Katalog: C:\dj\bajos

2014-01-18  13:23    <DIR>          .
2014-01-18  13:23    <DIR>          ..
2014-01-18  13:22               122 func.c
2014-01-18  13:23                63 func.h
2014-01-18  13:21                75 main.c
2014-01-18  13:23               608 main.o
               4 plik(ów)             868 bajtów
               2 katalog(ów)  23 931 699 200 bajtów wolnych

C:\dj\bajos>
0

Ojjć ^^ ja nie pobrałem djdev203.zip bo myślałem, że to source dla developerów. To szybko pobiorę wgram od nowa najlepiej DJGPP i sprawdzę czy wszystko działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1