Howdy all! I have some questions about how to use a static library after building and installing both shared and static, when the library is built with libtool.
I am maintaining a popular earth science data library, which, until now, has always been built as a static library. But I have recently converted it to libtool. For example, I built my library and install it with prefix /home/ed/n3_install. Now I have a /home/ed/n3_install/lib directory, with both static and shared versions of the library. /home/ed/n3_install/lib: -rw-r--r-- 1 ed ustaff 795368 Jul 29 05:01 libnetcdf.a -rwxr-xr-x 1 ed ustaff 968 Jul 29 05:00 libnetcdf.la lrwxrwxrwx 1 ed ustaff 18 Jul 29 05:00 libnetcdf.so -> libnetcdf.so.1.2.6 lrwxrwxrwx 1 ed ustaff 18 Jul 29 05:00 libnetcdf.so.1 -> libnetcdf.so.1.2.6 -rwxr-xr-x 1 ed ustaff 538366 Jul 29 05:00 libnetcdf.so.1.2.6 Now I write a little test program, test.c, which calls one of the library functions, and build it like this: gcc test.c -I/home/ed/n3_install/include -L/home/ed/n3_install/lib -lnetcdf But when I run this, it tells me that it can't find the shared library... bash-3.00$ ./a.out ./a.out: error while loading shared libraries: libnetcdf.so.1: cannot open shared object file: No such file or directory However, if I use the -static flag, it works as I expect: gcc -static test.c -I/home/ed/n3_install/include -L/home/ed/n3_install/lib -lnetcdf bash-3.00$ ./a.out library version: "3.6.2-beta4" of Jul 29 2006 05:00:56 $ So apparently if there is a shared library gcc will use it by default. And to use the static one, you have to add the -static flag to gcc. Is this correct? Are other compilers the same in these respects? Do they generally use the shared library by default, and require some flags to use the static one? The immediate result is that if I have the build and install shared libraries, I am going to break everyone's makefiles on that machine. :-( It's a shame that gcc didn't take the other approach, of using static libraries unless told to use the shared ones. That way, users could install the shared libraries on their machine and start to use them, without breaking all existing builds on that machine. As it is, I think most of my users will not want shared libraries at all, if it means that all their Makefiles break and have to be changed. And, even worse, they have to be changed in a compiler-dependent way! (Which means each and every user would email me and ask me how to do it for their compiler!) Hopefully I am missing something here? Thanks, Ed -- Ed Hartnett -- [EMAIL PROTECTED] _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool