Не удается добавить модуль загрузки «/usr/lib/pa20_64/libpthread.1», поскольку он содержит данные, относящиеся к потокам - PullRequest
1 голос
/ 10 ноября 2010

Я получаю эту ошибку при загрузке библиотеки с помощью dlopen () :

Cannot dlopen load module '/usr/lib/pa20_64/libpthread.1' because it contains thread specific data.

Я посмотрел это в Google, и следующий экспорт исправил его.

export LD_PRELOAD=/usr/lib/hpux64/libpthread.so.1

Кто-нибудь может сказать мне, что именно LD_PRELOAD делает и почему я должен предварительно загрузить эту библиотеку?Почему компоновщик не загружает его?

Компиляция с -lpthread также не помогает.

ENV: HP-UX hhtenb1 B.11.31 U ia64 3881169896лицензия на неограниченное количество пользователей

Ответы [ 2 ]

0 голосов
/ 27 июня 2013

У нас была эта ошибка ниже на hpux-11.31 IA64 с DB2-10.1.2 и

    "export LD_PRELOAD=/usr/lib/hpux64/libpthread.so.1"  

исправил.

DATA #2 : String, 49 bytes
/home/db2inst1/sqllib/lib64/icc/libgsk8iccs_64.so
CALLSTCK: (Static functions may not be resolved correctly, as they are resolved to the nearest symbol)
  [0] 0xC000000032488900 pdOSSeLoggingCallback + 0x980
  [1] 0xC000000010CC5A00 ossLog + 0x4E0
  [2] 0xC000000010CC5610 ossLog + 0xF0
  [3] 0xC00000003255E100 _Z27cryptDynamicLoadGSKitCryptoPc + 0x5F0
  [4] 0xC00000003255F460 cryptContextRealInit + 0x200
  [5] 0xC000000032561950 cryptContextCheckAndInit + 0x130
  [6] 0xC000000032561B70 cryptDHInit + 0x120
  [7] 0xC00000003384FBD0 sqlexSlcServerEncryptAccsec + 0x170
  [8] 0xC00000003384F7B0 _Z33sqlexSlcServerEncryptAuthenticateP14db2UCinterfacelPj + 0xF0
  [9] 0xC0000000321FB7D0 _Z20sqlexAppAuthenticateP14db2UCinterface + 0x1A60
  [10] 0xC0000000321F8920 _Z18sqljrDrdaArConnectP14db2UCinterface + 0x140
  [11] 0xC0000000321E96F0 _Z16sqleUCdrdaARinitP14db2UCconHandle + 0x230
  [12] 0xC000000032238CD0 sqleUCappConnect + 0x13C0
  [13] 0xC000000032647B20  _Z14CLI_sqlConnectP15CLI_CONNECTINFOP5sqlcaP19CLI_ERRORHEADERINFO + 0x32A0
  [14] 0xC0000000325D5710 _Z11SQLConnect2P15CLI_CONNECTINFOPhsS1_sS1_sS1_sh + 0xA10
  [15] 0xC0000000325ADB90 _Z17SQLDriverConnect2P15CLI_CONNECTINFOPvPhsS2_sPsthhP19CLI_ERRORHEADERINFO + 0x26E0
  [16] 0xC0000000325AAC00 _Z11SQLConnect1P15CLI_CONNECTINFOPhsS1_sS1_s + 0xB60
  [17] 0xC0000000325A8E30 SQLConnect + 0xC10
  [18] 0x4000000000001EA0 main + 0x620
  [19] 0xC00000000006E9B0 _DYNAMIC + 0xC00000000006E993
0 голосов
/ 10 ноября 2010

Я не могу рассказать вам все подробности о HPUX, но попробуйте связать вашу программу с -lpthread - это может решить вашу проблему.

В действительности библиотека, которую вы используете dlopen (), кажется,копаться во время выполнения, чтобы найти версию libpthread.LD_PRELOAD просто загружает указанную библиотеку, как если бы вы ее отбрасывали, но она делает это до того, как программа сможет запустить.

Не уверен в деталях, но смутное предположение: какая-то библиотека, которую вы используетеВызвал функции статических данных pthread до того, как ваш dlopen вызовет загрузку libpthread (но зачем ему пытаться загрузить pthread тогда, если первая библиотека имела его как зависимость??).

...