내 문제는 공유 라이브러리와 정적 라이브러리에 대한 지식이 부족하기 때문에 다소 문제가 될 수 있습니다.세그먼트 화 오류 프로그램이 공유 라이브러리로 컴파일되었지만 정적이 아닙니다.
저는 앞으로 infiniband를 학습/실습으로 사용하여 서버/클라이언트 시스템에서 작업하고 있습니다. 원래 2 개의 실행 파일이 있었는데, 각 파일에는 동일한 소스 코드가 포함되어 있으므로 헤더 파일과 함께 RDMAConnectionManager.cpp 및 RDMAConnection.cpp 인 공용 파일로 분할했습니다.
줄을 따라 나는 그 파일들이 라이브러리가되기를 바랬다. 그래서 내 서버와 클라이언트가 동일한 하위 레벨 코드를 사용할 수 있도록했다. 저는 항상 공유 라이브러리를 사용 했으므로 cmake를 통해 공유 라이브러리를 만드는 표준에 따라 일을 진행했습니다.
문제는 최대한 빨리이 그랬던 것처럼 내가 ib_verbs 기능 구체적으로, 라이브러리 rdmacm에서 제공하는 기능에 세그먼트 오류를 얻을 것이었다. 나는 그것이 질서를 연결하는 것과 관련이 있다고 생각했지만 도움을 바꾼 것은 아무것도 없었다.
변덕스럽게 나는 SHARED 라이브러리에서 STATIC 라이브러리로 변경했습니다. 이것은 완벽하게 작동했습니다! 정적에 대한 나의 이해는 그것이 링크 된 라이브러리의 모든 심볼을 포함하는 반면 링크 된 라이브러리의 모든 심볼을 포함한다는 것입니다. 그러나 이제 나는이 곤란한 문제를 발견했다. 나는 뭔가를 놓치고있는 것처럼 느낀다.
나는 그 이후로 더 많은 독서를했으며 차이점에 대해 더 편안하다고 느꼈지만, 여전히이 문제의 원인 (또는 앞으로 어떻게 될지)을 알지 못합니다. 누군가 이런 일이 일어날 수있는 이유를 알고 있습니까?
완벽하게 작동하지 않았습니다. 당신은 세그 폴트를 위장한 물건들을 움직 였지만 여전히 거기에 있습니다. 공유 라이브러리는 50 년 전부터 사용되어 왔습니다. RDMA는 10 년 동안 사용되었습니다. 귀하의 코드는 2 일 동안 사용되었습니다. 오캄의 면도날은 무엇을 말합니까? – stark
아마도'ldd'를 사용하여 실제로 사용하고 있다고 예상되는 동적 라이브러리를 사용하고 있는지 확인할 수 있습니다. –