This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem with dlsym against libicu

On 1/22/2016 10:49 PM, Sam Habiel wrote:
Hello all.

I am porting GT.M
( to run
on Cygwin x86. My changes are here: GT.M is used in healthcare and
banking; I happen to work in the former field.

The problem I am having is that GT.M opens libicuio via dlopen, and
then loads the function pointers into a data structure via function
name using dlsym. For the curious, the code is in gtm_icu_init() in

I took me a while, but I eventually figured out that dlls that are
opened via dlopen need to be in the PATH in Cygwin. I saw this in an
earlier Cygwin mailing list message.

However, no matter what I do, I can't seem to get a non-null reference
to a named symbol in libicuio via dlsym. Here's what I tried:

0. nm shows the symbols in the file I want to open; strace shows me
opening it (it's /usr/lib/cygicuio56.dll).
1. Compiled libicu from source with a flag for Cygwin:
2. Used underscores in front of the symbol
3. Tried creating an import library using the instructions at at the bottom and
then add the archive to the gcc compile command as a source file.
(These instructions need to be improved! I had no idea what to do with
a .a file after I got it).

Here's a test program that I have written. Note that dlsym returns the
obscure error message "no such process", which doesn't make any sense
to me, as I am not looking for a "process" but a symbol.

sam@horus ~/fis-gtm-cygwin
$ cat test.c
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>

int main (int arg, char **argv)
     void *ptr = dlopen("cygicuio.dll", RTLD_LAZY);
     if (ptr != NULL)

     void *ptr2 = dlsym(ptr,"uset_open");

     if (ptr2 != NULL)

     return 0;

I can't answer your questions, but I have some comments and questions.

First, there's no /usr/lib/cygicuio56.dll in the Cygwin icu distribution. The DLL is /usr/bin/cygicuio56.dll, with the corresponding import library /usr/lib/libicuio56.dll.a (provided by the libicu-devel-56.1 package). And there's also a symlink /usr/lib/libicuio.dll.a -> libicuio56.dll.a.

Next, can you show the nm command by which you found uset_open? I couldn't find it. I tried

$ nm /usr/lib/libicuio56.dll.a | grep uset_open

and got nothing.  On the other hand:

$ strings /usr/bin/cygicuio56.dll | grep uset_open

Could the problem be that uset_open (or uset_open_56) isn't exported?


Problem reports:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]