Цель - собрать код с использованием OpenCASCADE (OCE) c crosscompile под windows. Для этого использую mxe с пакетом oce.
Сборка mxe и всех зависимостей прошла без проблем. Простые примеры собираются и запускаются. Но возникла сложность при линковке OCE:
Пример кода
#include <TopoDS.hxx>
#include <BRepMesh_IncrementalMesh.hxx>
int main(){
TopoDS_Shape shape;
BRepMesh_IncrementalMesh(shape, 0.1);
return 0;
}
Собираю:
/usr/src/mxe/usr/bin/x86_64-w64-mingw32.static-g++ -o code ../tmp/code.cxx \\
-I /usr/src/mxe/usr/x86_64-w64-mingw32.static/include/oce \\
-L /usr/src/mxe/usr/x86_64-w64-mingw32.static/lib/ \\
-lTKMesh -lTKPrim -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKMath -lTKernel
Получаю ошибку:
/tmp/ccCSrdq9.o:code.cxx:(.text$_ZNK15BRepMesh_Vertex8HashCodeEi[_ZNK15BRepMesh_Vertex8HashCodeEi]+0x65): undefined reference to `__imp__Z8HashCodedi'
collect2: error: ld returned 1 exit status
Искомая функция Z8HashCodedi находится в libTKernel.a:
nm /usr/src/mxe/usr/x86_64-w64-mingw32.static/lib/libTKernel.a | grep Z8HashCodedi
0000000000000000 t _GLOBAL__sub_I__Z8HashCodedi
0000000000000010 T _Z8HashCodedi << Standard_Real.cxx.obj
U _Z8HashCodedi << TColStd_MapRealHasher_0.cxx.obj
Вопрос первый - почему nm показывает две строчки с совпадением?
Вопрос второй - почему компилятор не находит функцию?
Упростил код сведя к вызову проблемной фукнции
#include <Standard_Integer.hxx>
#include <Standard_Real.hxx>
int main() {
Standard_Real r = 1.e0;
Standard_Integer i = 1;
return HashCode(r,i);
}
И в команде сборки оставил только -lTKernel, результат всё тот же.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
пишу в qt creator, создал консольное приложение без qt, но русские буквы выводятся крокозябрами:
Зашел разговор про 1с и я услышал следующее мнение - что 1с написана на ЯП Русского разлива, те