Compilar en Ubuntu
Compilar en Ubuntu
Estoy empezando a compilar en Ubuntu, de momento solo en modo consola, y me encuentro con que consigo pasar el prg a c con Harbour pero luego con el gcc no consigo generar el ejecutable.
He hecho lo siguiente:
1º.- Instalar en SVN (Source Version control system):
sudo apt-get install subversion
2º.- Descargar de sourceforge la version de Harbour al directorio harbour-project en el directorio local del usuario que haya ejecutado la siguiente instrucción:
svn co https://harbour-project.svn.sourceforge ... ur-project harbour-project
Esto tarda un ratillo.
3º.- Ahora se compila la versión descargada con el fichero descargado make_gnu.sh:
i.- Cambiamos al directorio donde está el fichero:
cd ./harbour-project/branches/harbour-1.0
ii.- Cambiamos los atributos de make_gnu.sh para hacerlo ejecutable:
chmod +x ./make_gnu.sh
iii.- Echamos a andar el fichero:
./make_gnu.sh
4º.- Con esto ha quedado compilado el harbour.
5º.- Ahora copiamos lo necesario al arbol de directorios apropiado:
Creamos, colgando de nuestro directorio local la siguiente estructura de directorios:
harbour
/bin
/lib
/include
/doc
6º.- Copiamos los ficheros:
i.- En /bin el ejecutable que la compilacion de harbour a generado en el directorio: harbour-project/branches/harbour-1.0/source/main/linux/gcc
ii.- En /lib todos los archivos generados en: harbour-project/branches/harbour-1.0/lib/linux/gcc
iii.- En /include todos los archivos generados en: harbour-project/branches/harbour-1.0/include
iv.- En /doc todos los archivos presentes en: harbour-project/branches/harbour-1.0/doc
7º.- Ahora edito un programa.prg básico como:
function main()
? "Hola Mundo"
return
8º.- Lo compilo con Harbour:
./harbour/bin harbour programa.prg -n -I ./../include -I./../../harbour/include
y con esto se genera el fichero programa.c
9º.- Aquí es don de me falla la obtención del ejecutable:
gcc programa.c -c -I./../include
He hecho lo siguiente:
1º.- Instalar en SVN (Source Version control system):
sudo apt-get install subversion
2º.- Descargar de sourceforge la version de Harbour al directorio harbour-project en el directorio local del usuario que haya ejecutado la siguiente instrucción:
svn co https://harbour-project.svn.sourceforge ... ur-project harbour-project
Esto tarda un ratillo.
3º.- Ahora se compila la versión descargada con el fichero descargado make_gnu.sh:
i.- Cambiamos al directorio donde está el fichero:
cd ./harbour-project/branches/harbour-1.0
ii.- Cambiamos los atributos de make_gnu.sh para hacerlo ejecutable:
chmod +x ./make_gnu.sh
iii.- Echamos a andar el fichero:
./make_gnu.sh
4º.- Con esto ha quedado compilado el harbour.
5º.- Ahora copiamos lo necesario al arbol de directorios apropiado:
Creamos, colgando de nuestro directorio local la siguiente estructura de directorios:
harbour
/bin
/lib
/include
/doc
6º.- Copiamos los ficheros:
i.- En /bin el ejecutable que la compilacion de harbour a generado en el directorio: harbour-project/branches/harbour-1.0/source/main/linux/gcc
ii.- En /lib todos los archivos generados en: harbour-project/branches/harbour-1.0/lib/linux/gcc
iii.- En /include todos los archivos generados en: harbour-project/branches/harbour-1.0/include
iv.- En /doc todos los archivos presentes en: harbour-project/branches/harbour-1.0/doc
7º.- Ahora edito un programa.prg básico como:
function main()
? "Hola Mundo"
return
8º.- Lo compilo con Harbour:
./harbour/bin harbour programa.prg -n -I ./../include -I./../../harbour/include
y con esto se genera el fichero programa.c
9º.- Aquí es don de me falla la obtención del ejecutable:
gcc programa.c -c -I./../include
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
> gcc programa.c -c -I./../include
Que error te da ?
Copia aqui la salida de pantalla, gracias
Que error te da ?
Copia aqui la salida de pantalla, gracias
Re: Compilar en Ubuntu
sdp@sdp-desktop:~/harbour$ gcc prueba.c -c -I./../include
prueba.c:7:21: error: hbvmpub.h: No existe el fichero ó directorio
prueba.c:8:20: error: hbinit.h: No existe el fichero ó directorio
prueba.c:11: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:11: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c:12: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:12: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c:13: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:13: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c: En la función ‘HB_INIT_SYMBOLS_BEGIN’:
prueba.c:17: error: expected expression before ‘{’ token
prueba.c: En el nivel principal:
prueba.c:17: error: expected identifier or ‘(’ before ‘,’ token
prueba.c:18: error: expected identifier or ‘(’ before ‘,’ token
prueba.c:20: error: expected ‘)’ before string constant
sdp@sdp-desktop:~/harbour$
prueba.c:7:21: error: hbvmpub.h: No existe el fichero ó directorio
prueba.c:8:20: error: hbinit.h: No existe el fichero ó directorio
prueba.c:11: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:11: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c:12: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:12: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c:13: aviso: la definición de datos no tiene tipo o clase de almacenamiento
prueba.c:13: aviso: nombres de parámetros (sin tipos) en la declaración de la función
prueba.c: En la función ‘HB_INIT_SYMBOLS_BEGIN’:
prueba.c:17: error: expected expression before ‘{’ token
prueba.c: En el nivel principal:
prueba.c:17: error: expected identifier or ‘(’ before ‘,’ token
prueba.c:18: error: expected identifier or ‘(’ before ‘,’ token
prueba.c:20: error: expected ‘)’ before string constant
sdp@sdp-desktop:~/harbour$
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
Si la carpeta include es hija de la carpeta harbour, entonces tendrias que compilar asi:
gcc prueba.c -c -I./include
gcc prueba.c -c -I./include
Re: Compilar en Ubuntu
Correcto, con esto genera el fichero programa.o (objeto)
Me queda generar el .exe que no se como se hace.
Me queda generar el .exe que no se como se hace.
Re: Compilar en Ubuntu
Lo estoy intentando generar con las siguientes instrucciones, pero sigue sin funcionar:
Me da los mensajes siguientes:
./bin/harbour prueba.prg -n -I./../include -I./../../harbour/include
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
[gcc -W -Wall -o prueba.exe prueba.c -I./include
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
/tmp/cco7NRXa.o: In function `hb_vm_SymbolInit_PRUEBA':
prueba.c:(.text+0x2e): undefined reference to `hb_vmProcessSymbolsEx'
/tmp/cco7NRXa.o: In function `HB_FUN_MAIN':
prueba.c:(.text+0x50): undefined reference to `hb_vmExecute'
/tmp/cco7NRXa.o:(.data+0x18): undefined reference to `HB_FUN_QOUT'
collect2: ld devolvió el estado de salida 1
~/harbour$ sudo ./prueba.exe
sudo: ./prueba.exe: command not found
No se si es que me falta algún include en el prg o que no uso bien las opciones del compilador gcc.
Me da los mensajes siguientes:
./bin/harbour prueba.prg -n -I./../include -I./../../harbour/include
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
[gcc -W -Wall -o prueba.exe prueba.c -I./include
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
/tmp/cco7NRXa.o: In function `hb_vm_SymbolInit_PRUEBA':
prueba.c:(.text+0x2e): undefined reference to `hb_vmProcessSymbolsEx'
/tmp/cco7NRXa.o: In function `HB_FUN_MAIN':
prueba.c:(.text+0x50): undefined reference to `hb_vmExecute'
/tmp/cco7NRXa.o:(.data+0x18): undefined reference to `HB_FUN_QOUT'
collect2: ld devolvió el estado de salida 1
~/harbour$ sudo ./prueba.exe
sudo: ./prueba.exe: command not found
No se si es que me falta algún include en el prg o que no uso bien las opciones del compilador gcc.
Re: Compilar en Ubuntu
He añadido al compilador gcc delante de prueba.c la opcion -c y ahora genera el fichero prueba.exe pero me da el siguiente error:
~/harbour$ ls
bin doc hbbuild.sh hbbuild.sh~ include lib prueba.c prueba.exe prueba.o prueba.prg prueba.prg~
~/harbour$ chmod +x prueba.exe
~/harbour$ sudo ./prueba.exe
./prueba.exe: 1: Syntax error: word unexpected (expecting ")")
~/harbour$
En fin, ya no se qué hacer.
~/harbour$ ls
bin doc hbbuild.sh hbbuild.sh~ include lib prueba.c prueba.exe prueba.o prueba.prg prueba.prg~
~/harbour$ chmod +x prueba.exe
~/harbour$ sudo ./prueba.exe
./prueba.exe: 1: Syntax error: word unexpected (expecting ")")
~/harbour$
En fin, ya no se qué hacer.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
Antonio, me vas a perdonar por mi ignorancia, pero no soy capaz.
Más de 30.000 líneas de código funcionando correctamente en windows y no soy capaz de compilar un simple "hola mundo" en linux.
Es frustrante y desalentador. Esto es lo que exaspera de linux. He probado algo con python y oye, a la primera.
En fin, no me gusta resultar pesado, pero te ruego si puedes ser más explicito en cuanto a la instrucción exacta que haya que usar gcc porque no hay manera.
La estructura de directorios que utilizo es colgando del directorio personal tengo:
harbour
/bin
/lib
/include
/doc
Saludos y nuevamente Feliz Navidad.
Más de 30.000 líneas de código funcionando correctamente en windows y no soy capaz de compilar un simple "hola mundo" en linux.
Es frustrante y desalentador. Esto es lo que exaspera de linux. He probado algo con python y oye, a la primera.
En fin, no me gusta resultar pesado, pero te ruego si puedes ser más explicito en cuanto a la instrucción exacta que haya que usar gcc porque no hay manera.
La estructura de directorios que utilizo es colgando del directorio personal tengo:
harbour
/bin
/lib
/include
/doc
Saludos y nuevamente Feliz Navidad.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
Este build.sh acabo de probarlo en Ubuntu, sin usar FiveLinux, y ha funcionado a la primera:
Solo tendrías que actualizar los nombres de las librerias para Harbour
Code: Select all
# ./build.sh
clear
if [ $# = 0 ]; then
echo syntax: ./build.sh file [options...]
exit
fi
echo compiling...
./../../harbour/bin/harbour $1 -n -I./../include -I./../../harbour/include $2
echo compiling C module...
gcc $1.c -c -I./../include -I./../../harbour/include
echo linking...
gcc $1.o -o$1 -L./../lib -L./../../harbour/lib -Wl,--start-group -lcommon -lvm -lrtl -lrdd -lmacro -llang -lcodepage -lpp -ldbfntx -ldbfcdx -ldbffpt -lhbsix -lusrrdd -lct -lgtstd -ldebug -lm -lgpm -lncurses -Wl,--end-group
rm $1.c
rm $1.o
echo done!
./$1
Re: Compilar en Ubuntu
Antonio, los nombres de las librerias que tengo son ligeramente distintos, en concreto el proceso de construcción de harbour descrito en el mensaje inicial de este hilo da como resultado las siguientes librerias que ha copiado en el directorio /harbour/lib que cuelga de mi carpeta personal:
libgtcgi.a libgtpca.a libgtstd.a libgttrm.a libhbbmcdx.a libhbbtree.a libhbclipsm.a libhbcommon.a libhbcpage.a libhbcplr.a libhbct.a libhbdebug.a libhbextern.a libhbgt.a libhbhsx.a libhblang.a libhbmacro.a libhbmisc.a libhbmsql.a libhbmzip.a libhbnf.a libhbnulrdd.a libhbpcre.a libhbpp.a libhbrdd.a libhbrtl.a libhbsix.a libhbsqlit3.a libhbtip.a libhbtpathy.a libhbusrrdd.a libhbvm.a libhbvpdf.a libhbziparc.a libhbzlib.a
librddado.a librddcdx.a librddfpt.a librddntx.a libxhb.a
He añadido ese "libhbb" y el ".a " a los nombres de las librerias que aparecen en tu "build.sh" pero me dice al linkar que no encuentra "libhbcommon.a", que es la primera de la lista del "build.sh" y se para el gcc. Además no entiendo las secuencias gcc del proceso del linkado -L./../lib -L./../../harbour/lib . ¿Porqué aparecen dos /lib? y ¿A que ruta hacen referencia ./../lib y ./../../harbour/lib?. Creo que dada la estructura de directorios que tengo (la recomendada al instalar harbour) debería de ser solo -L./harbour/lib, es decir, la instrucción de linkado con gcc quedaría, dado que estamos situados en el directorio harbour que cualega de la carpeta personal:
gcc $1.o -o$1 -L./lib -Wl,--start-group -libhbcommon.a -libhbvm.a -libhbrtl.a -libhbrdd.a -libhbmacro.a -libhblang.a -libhbcodepage.a -libhbpp.a -libhbdbfntx.a -libhbdbfcdx.a -libhbdbffpt.a -libhbhbsix.a -libhbusrrdd.a -libhbct.a -libhbgtstd.a -libhbdebug.a -libhbm.a -libhbgpm.a -libhbncurses.a -Wl,--end-group
en vez de:
gcc $1.o -o$1 -L./../lib -L./../../harbour/lib -Wl,--start-group -lcommon -lvm -lrtl -lrdd -lmacro -llang -lcodepage -lpp -ldbfntx -ldbfcdx -ldbffpt -lhbsix -lusrrdd -lct -lgtstd -ldebug -lm -lgpm -lncurses -Wl,--end-group
Pero esto tampoco funciona porque, como digo, no encuentra la primera libreria del grupo y se para.
Yo creo que va a ser más facil que me toque hoy el gordo de la Lotería que conseguir compilar el "hola mundo" en linux.
Cuando lo haya conseguido, aunque me haya tocado el gordo, voy a dejar en el foro un mensaje refundiendo todo el asunto.
Que haya suerte.
libgtcgi.a libgtpca.a libgtstd.a libgttrm.a libhbbmcdx.a libhbbtree.a libhbclipsm.a libhbcommon.a libhbcpage.a libhbcplr.a libhbct.a libhbdebug.a libhbextern.a libhbgt.a libhbhsx.a libhblang.a libhbmacro.a libhbmisc.a libhbmsql.a libhbmzip.a libhbnf.a libhbnulrdd.a libhbpcre.a libhbpp.a libhbrdd.a libhbrtl.a libhbsix.a libhbsqlit3.a libhbtip.a libhbtpathy.a libhbusrrdd.a libhbvm.a libhbvpdf.a libhbziparc.a libhbzlib.a
librddado.a librddcdx.a librddfpt.a librddntx.a libxhb.a
He añadido ese "libhbb" y el ".a " a los nombres de las librerias que aparecen en tu "build.sh" pero me dice al linkar que no encuentra "libhbcommon.a", que es la primera de la lista del "build.sh" y se para el gcc. Además no entiendo las secuencias gcc del proceso del linkado -L./../lib -L./../../harbour/lib . ¿Porqué aparecen dos /lib? y ¿A que ruta hacen referencia ./../lib y ./../../harbour/lib?. Creo que dada la estructura de directorios que tengo (la recomendada al instalar harbour) debería de ser solo -L./harbour/lib, es decir, la instrucción de linkado con gcc quedaría, dado que estamos situados en el directorio harbour que cualega de la carpeta personal:
gcc $1.o -o$1 -L./lib -Wl,--start-group -libhbcommon.a -libhbvm.a -libhbrtl.a -libhbrdd.a -libhbmacro.a -libhblang.a -libhbcodepage.a -libhbpp.a -libhbdbfntx.a -libhbdbfcdx.a -libhbdbffpt.a -libhbhbsix.a -libhbusrrdd.a -libhbct.a -libhbgtstd.a -libhbdebug.a -libhbm.a -libhbgpm.a -libhbncurses.a -Wl,--end-group
en vez de:
gcc $1.o -o$1 -L./../lib -L./../../harbour/lib -Wl,--start-group -lcommon -lvm -lrtl -lrdd -lmacro -llang -lcodepage -lpp -ldbfntx -ldbfcdx -ldbffpt -lhbsix -lusrrdd -lct -lgtstd -ldebug -lm -lgpm -lncurses -Wl,--end-group
Pero esto tampoco funciona porque, como digo, no encuentra la primera libreria del grupo y se para.
Yo creo que va a ser más facil que me toque hoy el gordo de la Lotería que conseguir compilar el "hola mundo" en linux.
Cuando lo haya conseguido, aunque me haya tocado el gordo, voy a dejar en el foro un mensaje refundiendo todo el asunto.
Que haya suerte.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
-L./../lib tienes que quitarlo pues es para FiveLinux. Disculpame, es que usé el de FiveLinux con unas modificaciones.
Asegúrate de que tienes el fichero libhbcommon.a construido.
Una vez resuelvas estos detalles, verás que la compilación en Linux es tan sencilla como en Windows. Lo que pasa es que estamos muy acostumbrados a "pensar" en Windows debido a tantos años usándolo...
Asegúrate de que tienes el fichero libhbcommon.a construido.
Una vez resuelvas estos detalles, verás que la compilación en Linux es tan sencilla como en Windows. Lo que pasa es que estamos muy acostumbrados a "pensar" en Windows debido a tantos años usándolo...
Re: Compilar en Ubuntu
Antonio, no entiendo que quieres decir con tener "construida" la libreria. Siguiendo las instrucciones expuestas para construir lo que te bajas del sourceforge he ejecutado make_gnu.sh y entendía que con eso se generaba el compilador de harbour y las librerias. ¿Hay que hacer algo más para construir las librerías?.
El error que me arroja es:
compiling...
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
compiling C module...
linking...
/usr/bin/ld: cannot find -libhbcommon.a
collect2: ld returned 1 exit status
done!
./build2.sh: línea 23: ./prueba: No existe el fichero ó directorio
El error que me arroja es:
compiling...
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
compiling C module...
linking...
/usr/bin/ld: cannot find -libhbcommon.a
collect2: ld returned 1 exit status
done!
./build2.sh: línea 23: ./prueba: No existe el fichero ó directorio
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Compilar en Ubuntu
Ya ví lo que te ocurre
En Linux no se escribe el prefijo "lib" ni la extensión ".a" aunque lo use el nombre del fichero. Asi en vez de:
-libhbcommon.a
tienes que escribir:
-lhbcommon
-l indica que es un fichero lib
En Linux no se escribe el prefijo "lib" ni la extensión ".a" aunque lo use el nombre del fichero. Asi en vez de:
-libhbcommon.a
tienes que escribir:
-lhbcommon
-l indica que es un fichero lib
Re: Compilar en Ubuntu
Antonio, yo creo que ya falta muy poco, para compilar en linux porque lo que es para que me toque el gordo queda otro año.
He metido en el build.sh que pusiste más arriba todas las librerías que se generan en ./lib, sustituyendo el lib inicial por -l y quitando el .a, y modificando el nombre de alguna como codepage por la que me entendía más parecida como cpage (hbcpage), porque los nombres no son todos iguales, y metiendo al final de la lista que tu pones en el build.sh el resto, hasta completar todas, las que constan en ./lib y me arroja el siguiente error:
compiling...
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
compiling C module...
linking...
./lib/libhbvm.a(hvm.o): In function `hb_vmModulus':
hvm.c:(.text+0x551e): undefined reference to `fmod'
./lib/libhbvm.a(hvm.o): In function `hb_vmPower':
hvm.c:(.text+0x560d): undefined reference to `pow'
./lib/libhbrtl.a(math.o): In function `HB_FUN_EXP':
math.c:(.text+0x7dd): undefined reference to `exp'
./lib/libhbrtl.a(math.o): In function `HB_FUN_LOG':
math.c:(.text+0x912): undefined reference to `log'
./lib/libhbrtl.a(math.o): In function `HB_FUN_SQRT':
math.c:(.text+0xa4a): undefined reference to `sqrt'
./lib/librddntx.a(dbfntx1.o): In function `hb_ntxSortNew':
dbfntx1.c:(.text+0xb6fc): undefined reference to `sqrt'
dbfntx1.c:(.text+0xb70a): undefined reference to `ceil'
dbfntx1.c:(.text+0xb752): undefined reference to `sqrt'
dbfntx1.c:(.text+0xb75a): undefined reference to `ceil'
./lib/libhbcommon.a(hbstr.o): In function `hb_numPow10':
hbstr.c:(.text+0x4bb): undefined reference to `pow'
./lib/libhbcommon.a(expropt2.o): In function `hb_compExprReduceMod':
expropt2.c:(.text+0x4b1): undefined reference to `fmod'
./lib/libhbcommon.a(expropt2.o): In function `hb_compExprReducePower':
expropt2.c:(.text+0xa2b): undefined reference to `pow'
expropt2.c:(.text+0xa4d): undefined reference to `pow'
expropt2.c:(.text+0xa6c): undefined reference to `pow'
expropt2.c:(.text+0xaa0): undefined reference to `pow'
expropt2.c:(.text+0xacb): undefined reference to `pow'
collect2: ld returned 1 exit status
done!
./build4.sh: línea 23: ./prueba: No existe el fichero ó directorio
El build4.sh que he usado es el siguiente:
# ./build4.sh
clear
if [ $# = 0 ]; then
echo syntax: ./build2.sh file [options...]
exit
fi
echo compiling...
./bin/harbour $1.prg -n -I./include
echo compiling C module...
gcc $1.c -c -I./../include -I./include
echo linking...
gcc $1.o -o$1 -L./lib -Wl,--start-group -lhbcommon -lhbvm -lhbrtl -lhbrdd -lhbmacro -lhblang -lhbcpage -lhbpp -lrddntx -lrddcdx -lrddfpt -lhbsix -lhbusrrdd -lhbct -lgtstd -lhbdebug -lgtcgi -lgtpca -lgttrm -lhbbmcdx -lhbbtree -lhbclipsm -lhbcplr -lhbextern -lhbgt -lhbhsx -lhbmisc -lhbmsql -lhbmzip -lhbnf -lhbnulrdd -lhbpcre -lhbrdd -lhbsqlit3 -lhbtip -lhbtpathy -lhbvpdf -lhbziparc -lhbzlib -lrddado -lxhb -Wl,--end-group
rm $1.c
rm $1.o
echo done!
./$1
He metido en el build.sh que pusiste más arriba todas las librerías que se generan en ./lib, sustituyendo el lib inicial por -l y quitando el .a, y modificando el nombre de alguna como codepage por la que me entendía más parecida como cpage (hbcpage), porque los nombres no son todos iguales, y metiendo al final de la lista que tu pones en el build.sh el resto, hasta completar todas, las que constan en ./lib y me arroja el siguiente error:
compiling...
Harbour 1.0.2dev Intl. (Rev. 9676)
Copyright (c) 1999-2008, http://www.harbour-project.org/
Compiling 'prueba.prg'...
Lines 3, Functions/Procedures 1
Generating C source output to 'prueba.c'... Done.
compiling C module...
linking...
./lib/libhbvm.a(hvm.o): In function `hb_vmModulus':
hvm.c:(.text+0x551e): undefined reference to `fmod'
./lib/libhbvm.a(hvm.o): In function `hb_vmPower':
hvm.c:(.text+0x560d): undefined reference to `pow'
./lib/libhbrtl.a(math.o): In function `HB_FUN_EXP':
math.c:(.text+0x7dd): undefined reference to `exp'
./lib/libhbrtl.a(math.o): In function `HB_FUN_LOG':
math.c:(.text+0x912): undefined reference to `log'
./lib/libhbrtl.a(math.o): In function `HB_FUN_SQRT':
math.c:(.text+0xa4a): undefined reference to `sqrt'
./lib/librddntx.a(dbfntx1.o): In function `hb_ntxSortNew':
dbfntx1.c:(.text+0xb6fc): undefined reference to `sqrt'
dbfntx1.c:(.text+0xb70a): undefined reference to `ceil'
dbfntx1.c:(.text+0xb752): undefined reference to `sqrt'
dbfntx1.c:(.text+0xb75a): undefined reference to `ceil'
./lib/libhbcommon.a(hbstr.o): In function `hb_numPow10':
hbstr.c:(.text+0x4bb): undefined reference to `pow'
./lib/libhbcommon.a(expropt2.o): In function `hb_compExprReduceMod':
expropt2.c:(.text+0x4b1): undefined reference to `fmod'
./lib/libhbcommon.a(expropt2.o): In function `hb_compExprReducePower':
expropt2.c:(.text+0xa2b): undefined reference to `pow'
expropt2.c:(.text+0xa4d): undefined reference to `pow'
expropt2.c:(.text+0xa6c): undefined reference to `pow'
expropt2.c:(.text+0xaa0): undefined reference to `pow'
expropt2.c:(.text+0xacb): undefined reference to `pow'
collect2: ld returned 1 exit status
done!
./build4.sh: línea 23: ./prueba: No existe el fichero ó directorio
El build4.sh que he usado es el siguiente:
# ./build4.sh
clear
if [ $# = 0 ]; then
echo syntax: ./build2.sh file [options...]
exit
fi
echo compiling...
./bin/harbour $1.prg -n -I./include
echo compiling C module...
gcc $1.c -c -I./../include -I./include
echo linking...
gcc $1.o -o$1 -L./lib -Wl,--start-group -lhbcommon -lhbvm -lhbrtl -lhbrdd -lhbmacro -lhblang -lhbcpage -lhbpp -lrddntx -lrddcdx -lrddfpt -lhbsix -lhbusrrdd -lhbct -lgtstd -lhbdebug -lgtcgi -lgtpca -lgttrm -lhbbmcdx -lhbbtree -lhbclipsm -lhbcplr -lhbextern -lhbgt -lhbhsx -lhbmisc -lhbmsql -lhbmzip -lhbnf -lhbnulrdd -lhbpcre -lhbrdd -lhbsqlit3 -lhbtip -lhbtpathy -lhbvpdf -lhbziparc -lhbzlib -lrddado -lxhb -Wl,--end-group
rm $1.c
rm $1.o
echo done!
./$1