cancel
Showing results for 
Search instead for 
Did you mean: 

Compiling Cobject in HP-UNIX

SOLVED
Go to solution
hemantbs11
Advisor

Compiling Cobject in HP-UNIX

Compiling C object in HP-UNIX
Hi,
We are in the process of server migration to Itanium.
It was found out during migration that we are required to recompile a *.c file in order to generate an executable object on the Itanium.
I tried compiling the *.c file but got an error 'unsatisfied symbol "mainz" '(file attached)
C

Some one please help me in compiling my *.c script on the itanium platform, this is subject to the delivery of the requirement now...
19 REPLIES
Duncan Edmonstone
Honored Contributor

Re: Compiling Cobject in HP-UNIX

It would appear you are trying to use the bundled C compiler, which generally won't work for anything apart from putting together a few bits of the kernel...

Presumably the PA system you are migrating from had a full ANSI C compiler... one would imagine you'll need the same thing on the Integrity system...

http://www.hp.com/go/ansic

HTH

Duncan

HTH

Duncan
Don Morris_1
Honored Contributor

Re: Compiling Cobject in HP-UNIX

I would expect it means that this .c is not meant to be a stand-alone binary but is instead part of a larger project/program (for example, this may be a component of a shared library).

The linker can't find the main() function [which is required in C programs] because the .c file which provides it isn't in this compilation pass.

To compile just this file into an object to be linked later, the "-c" option could be used. But I suspect the larger problem here is that you may not know how these .c files are laid out, what they mean to each other, etc.

Is there an INSTALL or README file somewhere? A configure script or Makefile? If this is a source package provided to you as a customer with the intent of you building your own, I would expect some documentation on the proper way to build this. Otherwise, if you didn't write it and the person(s) who did are unavailable and left no documentation, guessing on how to compile this is very unlikely to succeed.
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>we are required to recompile a *.c file

Well you compiled the file but you need a bunch more files to link with. Unless you were trying to create a shlib? (You can't do that with the bundled C compiler.)

>Duncan: http://www.hp.com/go/ansic

These are not the droids you want. The correct link for Integrity is:
http://www.hp.com/go/aCC

Duncan Edmonstone
Honored Contributor

Re: Compiling Cobject in HP-UNIX

>> These are not the droids you want.

Curses - damn jedi mind trick gets me every time...

anyway I've diff'd those 2 links in my head now - will try and get it right next time...

in the meantime:

you can go about your business - move along, move along


Duncan

HTH

Duncan
hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi All,
In line with the query posted, I am now able to compile the *.c source code using the command below
--> gcc -shared -o TFICM.o TFICM.c
output: TFICM.o
--> gcc -shared -o TFICM.so TFICM.o
output: TFICM.so

The file above TFICM.so is the executable file that we had to generate.
I am now not sure if the file created(TFICM.so) is correct or not.
I am now facing an error when running a custom process which says:
Error loading TFICM * is not a valid load module: Bad magic number

Please let me know as to why would this error be thrown and also the corrective measures required to rectify this.

Thank you in advance
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

> gcc -shared -o TFICM.so TFICM.o
>The file above TFICM.so is the executable file that we had to generate.

Do you want an executable or a shlib? Your command above (-shared) creates a shlib.

>I am now facing an error when running a custom process which says:
Error loading TFICM * is not a valid load module: Bad magic number

Your TFICM.so seems fine if you are trying to dynamically load it with dlopen(3). You do need to make sure it is 32 or 64 to match who loads it.

What does "file TFICM.so" show?
If you need a 64 bit version, you need to port your code to 64 bit and then compile and link with -mlp64.

hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
Thank you for your suggestion i tried creating the *.so file again using the below commands:

--> gcc -shared -mlp64 -o TFICM.o TFICM.c
output: TFICM.o
--> gcc -shared -mlp64 -o TFICM.so TFICM.o
output: TFICM.so

file TFICM.o --
TFICM.o: ELF-64 shared object file - IA64

file TFICM.so
TFICM.so: ELF-64 shared object file - IA64

I did want to create an executable as this is what is expected to be generated from the *.c code.
I was suggested to use "-shared" option by one of our consultants, I am not aware of any options used with gcc/cc as I am not from the background.
Can the TFICM.so file generated using the above commands be used as an executable?
Please suggest a way forward to generate an executable from the *.c file.
Note: We are taking up this activity on the Itanium server.




hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
Thanks a lot for the option suggested.
This worked a great deal, helping me to run my custom application error free.
Below are the steps used:
1)
--> gcc -c -mlp64 -o TFICM.o TFICM.c
output: TFICM.o

file TFICM.o
TFICM.o: ELF-64 relocatable object file - IA64

2)
--> gcc -shared -mlp64 -o TFICM.so TFICM.o
output: TFICM.so

file TFICM.so
TFICM.so: ELF-64 shared object file - IA64
-------------------

Please confirm a point below helping me completing this activity:
1) We have used GCC compiler above to compile the *.c code on ITANIUM server, should we use the aCC compiler instead because I have read somwher that aCC compiler is compatible with ITANIUM server?

Thanking you again for all the help.
Awaiting your response.
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>1) We have used gcc compiler above to compile the *.c code on Integrity server, should we use the aCC compiler instead because I have read somewhere that aCC compiler is compatible ...

If you want performance on Integrity, you should use aC++ (and optimize). If you have only C sources, gcc and cc are binary compatible.

hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Thanks a lot Dennis, helped me a lot
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>Thanks a lot Dennis, helped me a lot

You might want to look at the following to see how many points to assign to each reply and if you are happy, you should close it and say it has a solution:
http://forums.itrc.hp.com/service/forums/helptips.do?#34

hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
I wil surely rate the solution.
One question before i do that:
I tried to compile the same using an aCC compiler but i think option -mlp64 is not supported by aCC compiler, resulting in an error:
aCC: warning 901: unknown option: `-mlp64':

Kindly suggest me an option for aCC to produce a ELF-64 *.o file
If possible please list the steps to produce the *.so file
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>i think option -mlp64 is not supported by aCC compiler

The options are +DD64 and +DD32.

>If possible please list the steps to produce the *.so file

The option is: -b -o TFICM.so ...
http://docs.hp.com/en/14487/libs.htm#createlib

hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
I was just drafting this message and received your response.
1)
I found the +DD64 option and generated the *.o file
Command:
aCC -c +DD64 -o TFICM.o TFICM.c

file TFICM.o
TFICM.o: ELF-64 relocatable object file - IA64

Should this be the same as with the gcc compiler?
2)
I am now stuck with generating the *.so file which i want to create as a shared object.
"-shared" option is not supported by aCC compiler
I am searching for an equivalent command for aCC compiler but not able to find yet
Please help me...

Thank you in advance
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>Should this be the same as with the gcc compiler?

It should do the same but faster. :-)

>"-shared" option is not supported by aCC driver

You use the -b option to create a shlib.

Dennis Handly
Acclaimed Contributor
Solution

Re: Compiling C object in HP-UX

>aCC -c +DD64 TFICM.c

Oops, if this is a C source file, you should use cc to compile and link. So if you used aCC, it would be very different from gcc, the names would be mangled.

hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
I have used aCC for both compiling and linking now, resulting in a different error.
Earlier I had used the gcc compiler and my custom application was working fine.
Should I again compile it with gcc compiler and leave it as it is?
I am not aware of what difference it would make on an Itanium server.
My vendor had also mentioned about aCC.

What do you mean by "the names would be mangled"?
I am getting a little nervous now as i am approaching my delvery date.
It is a C source file that i am trying to compile and link
Should the type of compiler used to compile and link matter at all??
Banking on you again!!!! :)


hemantbs11
Advisor

Re: Compiling Cobject in HP-UNIX

Hi Dennis,
I have now been able to successfully test my custom application component.
Steps used to generate the exceutable file is as below.
--> cc -c +z +DD64 TFICM.c
output: TFICM.o
--> cc -b +DD64 -o TFICM.so TFICM.o
output: TFICM.so

Thank you for all the help.
Hope to not see any more issues :)
Thank you again.
Dennis Handly
Acclaimed Contributor

Re: Compiling C object in HP-UX

>Should I again compile it with gcc compiler and leave it as it is? I am not aware of what difference it would make on an Itanium server.

Just compile with cc. It will be faster if you optimize.

>My vendor had also mentioned about aCC.

aC++ is the name of the product. It contains the aCC, cc, c89 and c99 drivers.

>What do you mean by "the names would be mangled"?

If you compile your C sources with a C++ compiler, your symbols are mangled so C++ overloading works.

>It is a C source file that I am trying to compile and link Should the type of compiler used to compile and link matter at all?

Most definitely. Use cc to compile and link.

>Steps used to generate the executable file is as below.
$ cc -c +z +DD64 TFICM.c
$ cc -b +DD64 -o TFICM.so TFICM.o

For Integrity, you don't need +z. And if you like, you can combine the two steps for trivial single source load modules:
cc -b +DD64 -o TFICM.so TFICM.c

If you need to debug, you can add -g. If you want to optimize, +O2 or -O. And there is +wlint if you want to clean up your code.