alonho/pytrace

ImportError: dlopen(.../pytrace/tracer.so, 2): Symbol not found: _pyobj_to_cstr

Closed this issue · 7 comments

Tried to install on OS X Mountain Lion. Here's what I got:

gavriep-mac: ~$ brew install protobuf-c
==> Downloading http://protobuf-c.googlecode.com/files/protobuf-c-0.15.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/protobuf-c/0.15
==> make install
/usr/local/Cellar/protobuf-c/0.15: 11 files, 372K, built in 31 seconds

gavriep-mac: ~ $ mkvirtualenv trace
...
(trace)gavriep-mac: ~ $ pip install pytrace
...
Successfully installed pytrace sqlalchemy urwid
Cleaning up...

(trace)gavriep-mac: ~ $ cat /tmp/hello.py                                                                       ~ 
print "Hello"

(trace)gavriep-mac: ~ $ pytrace /tmp/hello.py                                                                   ~ 
Traceback (most recent call last):
  File "/Users/gavriep/.virtualenvs/trace/bin/pytrace", line 8, in <module>
    load_entry_point('pytrace==0.1.4', 'console_scripts', 'pytrace')()
  File "/Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 318, in load_entry_point
  File "/Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 2221, in load_entry_point
  File "/Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1954, in load
  File "/Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/pytrace/__init__.py", line 4, in <module>
    from . import tracer
ImportError: dlopen(/Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/pytrace/tracer.so, 2): Symbol not found: _pyobj_to_cstr
  Referenced from: /Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/pytrace/tracer.so
  Expected in: flat namespace
 in /Users/gavriep/.virtualenvs/trace/lib/python2.7/site-packages/pytrace/tracer.so
(trace)gavriep-mac: ~ $                                                                                         ~ 

BTW, it was compiled using clang and not gcc, if that matters.

Here's the full compilation output:

  Running setup.py install for pytrace
    building 'pytrace.tracer' extension
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/trace.c -o build/temp.macosx-10.8-intel-2.7/ext/trace.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/serial.c -o build/temp.macosx-10.8-intel-2.7/ext/serial.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    ext/serial.c:73:23: warning: ordered comparison between pointer and integer ('int' and 'void *')
      return (get_depth() < pthread_getspecific(no_trace_context_key) - DEPTH_MAGIC);
              ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 warning generated.
    ext/serial.c:41:23: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
      bin_data->len = min(strlen(str), MAX_STR_SIZE);
                      ~~~ ^~~~~~~~~~~
    ext/serial.c:73:23: warning: ordered comparison between pointer and integer ('int' and 'void *')
      return (get_depth() < pthread_getspecific(no_trace_context_key) - DEPTH_MAGIC);
              ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2 warnings generated.
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/write.c -o build/temp.macosx-10.8-intel-2.7/ext/write.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    ext/write.c:13:25: warning: implicit conversion loses integer precision: 'unsigned long' to 'unsigned int' [-Wshorten-64-to-32]
      ring_write(ring, buf, size);
      ~~~~~~~~~~            ^~~~
    1 warning generated.
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/ring.c -o build/temp.macosx-10.8-intel-2.7/ext/ring.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/dump.c -o build/temp.macosx-10.8-intel-2.7/ext/dump.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/db.c -o build/temp.macosx-10.8-intel-2.7/ext/db.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    ext/db.c:178:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:201:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:216:10: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
      return sqlite3_last_insert_rowid(db);
      ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:247:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:263:70: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'long' [-Wshorten-64-to-32]
      int trace_id = handle_trace(rec->type, rec->time, rec->depth, rec->tid, func_id);
                     ~~~~~~~~~~~~                                   ~~~~~^~~
    5 warnings generated.
    ext/db.c:170:70: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
      SQLITE_ASSERT(sqlite3_bind_text(select, 1, (char*) sym->data, sym->len, SQLITE_TRANSIENT));
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:9:47: note: expanded from macro 'SQLITE_ASSERT'
    #define SQLITE_ASSERT(x) ASSERT(SQLITE_OK == (x))
                                                  ^
    ext/defs.h:25:13: note: expanded from macro 'ASSERT'
      ((void) ((expression) ? 0 : __ASSERT (expression, __FILE__, __LINE__)))
                ^~~~~~~~~~
    ext/db.c:175:72: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
        SQLITE_ASSERT(sqlite3_bind_text(insert, 1, (char*) sym->data, sym->len, SQLITE_TRANSIENT));
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:9:47: note: expanded from macro 'SQLITE_ASSERT'
    #define SQLITE_ASSERT(x) ASSERT(SQLITE_OK == (x))
                                                  ^
    ext/defs.h:25:13: note: expanded from macro 'ASSERT'
      ((void) ((expression) ? 0 : __ASSERT (expression, __FILE__, __LINE__)))
                ^~~~~~~~~~
    ext/db.c:178:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:191:91: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
      SQLITE_ASSERT(sqlite3_bind_text(stmt_funcs_select, 3, (char*) function->data, function->len, SQLITE_TRANSIENT));
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:9:47: note: expanded from macro 'SQLITE_ASSERT'
    #define SQLITE_ASSERT(x) ASSERT(SQLITE_OK == (x))
                                                  ^
    ext/defs.h:25:13: note: expanded from macro 'ASSERT'
      ((void) ((expression) ? 0 : __ASSERT (expression, __FILE__, __LINE__)))
                ^~~~~~~~~~
    ext/db.c:198:93: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
        SQLITE_ASSERT(sqlite3_bind_text(stmt_funcs_insert, 3, (char*) function->data, function->len, SQLITE_TRANSIENT));
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:9:47: note: expanded from macro 'SQLITE_ASSERT'
    #define SQLITE_ASSERT(x) ASSERT(SQLITE_OK == (x))
                                                  ^
    ext/defs.h:25:13: note: expanded from macro 'ASSERT'
      ((void) ((expression) ? 0 : __ASSERT (expression, __FILE__, __LINE__)))
                ^~~~~~~~~~
    ext/db.c:201:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:212:57: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
      SQLITE_ASSERT(sqlite3_bind_int(stmt_traces_insert, 4, tid));
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
    ext/db.c:9:47: note: expanded from macro 'SQLITE_ASSERT'
    #define SQLITE_ASSERT(x) ASSERT(SQLITE_OK == (x))
                                                  ^
    ext/defs.h:25:13: note: expanded from macro 'ASSERT'
      ((void) ((expression) ? 0 : __ASSERT (expression, __FILE__, __LINE__)))
                ^~~~~~~~~~
    ext/db.c:216:10: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
      return sqlite3_last_insert_rowid(db);
      ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/db.c:247:12: warning: implicit conversion loses integer precision: 'sqlite3_int64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        return sqlite3_last_insert_rowid(db);
        ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    9 warnings generated.
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/record_pb.c -o build/temp.macosx-10.8-intel-2.7/ext/record_pb.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Iext -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c ext/shared_ring.c -o build/temp.macosx-10.8-intel-2.7/ext/shared_ring.o -O0
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.8-intel-2.7/ext/trace.o build/temp.macosx-10.8-intel-2.7/ext/serial.o build/temp.macosx-10.8-intel-2.7/ext/write.o build/temp.macosx-10.8-intel-2.7/ext/ring.o build/temp.macosx-10.8-intel-2.7/ext/dump.o build/temp.macosx-10.8-intel-2.7/ext/db.o build/temp.macosx-10.8-intel-2.7/ext/record_pb.o build/temp.macosx-10.8-intel-2.7/ext/shared_ring.o -lprotobuf-c -lsqlite3 -o build/lib.macosx-10.8-intel-2.7/pytrace/tracer.so
    ld: warning: ignoring file /usr/local/lib/libprotobuf-c.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /usr/local/lib/libprotobuf-c.dylib

    Installing pytrace script to /Users/gavriep/.virtualenvs/trace/bin
  Running setup.py install for sqlalchemy
    building 'sqlalchemy.cprocessors' extension
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c lib/sqlalchemy/cextension/processors.c -o build/temp.macosx-10.8-intel-2.7/lib/sqlalchemy/cextension/processors.o
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.8-intel-2.7/lib/sqlalchemy/cextension/processors.o -o build/lib.macosx-10.8-intel-2.7/sqlalchemy/cprocessors.so
    building 'sqlalchemy.cresultproxy' extension
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c lib/sqlalchemy/cextension/resultproxy.c -o build/temp.macosx-10.8-intel-2.7/lib/sqlalchemy/cextension/resultproxy.o
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    clang -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.8-intel-2.7/lib/sqlalchemy/cextension/resultproxy.o -o build/lib.macosx-10.8-intel-2.7/sqlalchemy/cresultproxy.so

    warning: no files found matching '*.jpg' under directory 'doc'
    no previously-included directories found matching 'doc/build/output'
  Running setup.py install for urwid
    building 'urwid.str_util' extension
    clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c source/str_util.c -o build/temp.macosx-10.8-intel-2.7/source/str_util.o
    clang: warning: argument unused during compilation: '-mno-fused-madd'
    source/str_util.c:162:20: warning: implicit conversion loses integer precision: 'const long' to 'int' [-Wshorten-64-to-32]
                return widths[i+1];
                ~~~~~~ ^~~~~~~~~~~
    source/str_util.c:717:11: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
        ret = Py_CalcWidth(text, start_offs, end_offs);
            ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2 warnings generated.
    clang -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.8-intel-2.7/source/str_util.o -o build/lib.macosx-10.8-intel-2.7/urwid/str_util.so

Ok, I reproduced it. It happens when compiling with clang. Turns out the inline keyword is interpreted differently in gcc (specifically c89) and clang.

Fixed! thanks. And If you want to trace something, you need to call functions, not print statements (-:

You can pip install the new version (0.1.5)

Works fine now. This is totally cool! It's going to be useful.
The question, of course: Will it succeed in tracing tlib? :-)

I'm optimistic
On Aug 16, 2012 12:10 PM, "Gavrie Philipson" notifications@github.com
wrote:

Works fine now. This is totally cool! It's going to be useful.
The question, of course: Will it succeed in tracing tlib? :-)


Reply to this email directly or view it on GitHubhttps://github.com//issues/1#issuecomment-7780270.