TWS API Linux — ошибка сегментации — __bid64_to_stringC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 TWS API Linux — ошибка сегментации — __bid64_to_string

Сообщение Anonymous »

Запуск образца клиента CPP из коробки.
Я получаю сообщение об ошибке сегментации.

Код: Выделить всё

0x00005555555efba6 in __bid64_to_string ()
Используйте эту функцию в клиентском файле Decimal.h

Код: Выделить всё

extern "C" void __bid64_to_string(char*, Decimal, unsigned int*);
Это может иметь какое-то отношение к библиотеке с плавающей запятой, упомянутой в документации API: Intel® Decimal Floating-Point Math Library
https://interactivebrokers.github.io/tw ... ction.html
Я проверил, установлено ли это в моей версии Ubuntu, используя WSL Ubuntu 20.04.05

Код: Выделить всё

libintelrdfpmath-dev/now 2.0u2-4 amd64 [installed,local]

root@flare9x:~# dpkg -s libintelrdfpmath-dev
Package: libintelrdfpmath-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 72286
Maintainer: Ubuntu Developers 
Architecture: amd64
Source: intelrdfpmath
Version: 2.0u2-4
Description: Intel Decimal Floating-Point Math Library
Software implementation of the IEEE 754-2008 Decimal Floating-Point
Arithmetic specification, aimed at financial applications, especially
in cases where legal requirements make it necessary to use decimal, and
not binary floating-point arithmetic (as computation performed with
binary floating-point operations may introduce small, but unacceptable
errors).
Original-Maintainer: Christian Stalp 
Homepage: https://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library

Просматриваем make-файл:

Код: Выделить всё

CXXFLAGS=-pthread -Wall -Wno-switch -Wpedantic -Wno-unused-function -std=c++11
ROOT_DIR=../../../source/cppclient
BASE_SRC_DIR=${ROOT_DIR}/client
INCLUDES=-I${BASE_SRC_DIR} -I${ROOT_DIR}
SHARED_LIB_DIRS=${BASE_SRC_DIR}
SHARD_LIBS=libTwsSocketClient.so
TARGET=TestCppClient

$(TARGET)Static:
$(CXX) $(CXXFLAGS) $(INCLUDES) $(BASE_SRC_DIR)/*.cpp ./*.cpp $(BASE_SRC_DIR)/lib/libbid.a -o$(TARGET)Static

$(TARGET):
$(CXX) $(CXXFLAGS) $(INCLUDES) ./*.cpp $(BASE_SRC_DIR)/lib/libbid.so $(SHARED_LIB_DIRS)/$(SHARD_LIBS) -o$(TARGET)

clean:
rm -f $(TARGET) $(TARGET)Static *.o

Самое интересное: я могу скомпилировать точно такой же код в Windows, VScode в Win32.
Я пытался реализовать 32-битную версию с помощью gcc. добавление -m32.
При этом компилятор выдает многочисленные жалобы:

Код: Выделить всё

 1974 |  printf("Soft dollar tiers (%lu):", tiers.size());
|                             ~~^     ~~~~~~~~~~~~
|                               |               |
|                               |               std::vector::size_type {aka unsigned int}
|                               long unsigned int
|                             %u
Я закомментировал эти функции, которые включают %lu, поскольку они не нужны в основном приложении.
Скомпилируйте еще раз, на этот раз у нас есть ошибки с библиотеки, поставляемые с TWS API — математической библиотекой Intel для десятичных чисел с плавающей запятой. Эти библиотеки поставляются с исходной установкой TWS и находятся:

Код: Выделить всё

/source/cppclient/client/lib/libbid.a

Код: Выделить всё

/usr/bin/ld: i386:x86-64 architecture of input file `../../../source/cppclient/client/lib/libbid.a(bid64_string.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `../../../source/cppclient/client/lib/libbid.a(bid128_2_str_tables.o)' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `../../../source/cppclient/client/lib/libbid.a(bid_decimal_data.o)' is incompatible with i386 output
win32 прекрасно выполняет это vscode.
работает с ```gcc -m64``
Снова получите ошибку сегмента:

Код: Выделить всё

Thread 1 "TestCppClientSt" received signal SIGSEGV, Segmentation fault.
0x00005555555efba6 in __bid64_to_string ()
(gdb) bt
#0  0x00005555555efba6 in __bid64_to_string ()
#1  0x00007fffffffd940 in ?? ()
#2  0x00007fffffffd940 in ?? ()
#3  0x00007fffffffd940 in ?? ()
#4  0x00007fffffffd941 in ?? ()
#5  0x00007fffffffd940 in ?? ()
#6  0x00007fffffffd820 in ?? ()
#7  0x000055555555d5ff in std::iterator_traits::difference_type std::distance(char*, char*) ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
Не знаете, что это может быть на данный момент — WSL и запуск Ubuntu в Windows — этот процесс управляет памятью? конфликтует ли Ubuntu с Windows.
На этом этапе — что еще я могу проверить/устранить неполадки?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/750 ... -to-string
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Конвертировать Map > для списка > используя API потока
    Anonymous » » в форуме JAVA
    0 Ответы
    96 Просмотры
    Последнее сообщение Anonymous
  • Назначьте ввод Map> выходу Map>
    Anonymous » » в форуме JAVA
    0 Ответы
    124 Просмотры
    Последнее сообщение Anonymous
  • Ключевая ошибка в TWS API для Python при увеличении nextOrderId
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • API TWS Interactive Brokers — как исправить «Для запроса не найдено определение безопасности»?
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • TWS API ib_insync Задержка заказа в скобках на 35+ секунд после отправки
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»