에 벡터를 저장 다음과 같은 경고 : 나는 C에서 동적 링크 라이브러리 ++의 데이터 세그먼트에 벡터를 저장하려고 할 때마다 LINK : warning LNK4039: section '.SHARED' specified with /SECTION option does not exist
항상 발생합니다. 예를 들어
: 나는 간단한 변수를 저장하려고하면
가#include <vector>
struct Obj {
unsigned int A;
unsigned int B;
bool C;
std::vector< unsigned char > D;
};
#pragma data_seg(".SHARED")
std::vector<Obj> Objects;
#pragma data_seg()
#pragma comment (linker,"/section:.SHARED,RWS")
그러나, 컴파일시에는 경고가 없을 것입니다. 이처럼 :
내가하지 절대적으로 긍정적이지만, 내가 경고가 벡터를 초기화하지 않음으로써 발생되었다고 판단하고#pragma data_seg (".SHARED")
int SimpleVariable = 0;
#pragma data_seg()
? 그렇다면 어떻게 데이터 세그먼트에 저장 될 벡터를 초기화 할 수 있습니까?
다른 질문이 있는데, 이는 DLL 내의 데이터 세그먼트에 벡터를 저장하는 끔찍한 생각입니까?
내가 여러 프로세스에로드 될 DLL 내에서 벡터의 내용을 공유하려고
내 목표.
이 같이:
process_1.exe
- example.dll -| * access the same vector (SomeVector) as
| example.dll within process_2
|
std::vector SomeVector; // vector in example.dll
|
process_2.exe | * access the same vector (SomeVector) as
| example.dll within process_1
- example.dll -|
아마 그 data_segement에 복합 유형을 저장할 수 없기 때문일 수 있습니다. –
흠, 맞다면 여러 프로세스에로드되는 동일한 DLL간에 복잡한 유형을 공유하는 다른 방법이 있습니까? –
링커가 * 정적으로 * 초기화 된 데이터를 .bss 대신 데이터 세그먼트에 배치 할 것이라고 저는 믿습니다. 공유 메모리 블록을 만든 다음 new를 사용하여 벡터를 배치 할 수 있습니다. 또한 공유 메모리에 관련 데이터를 할당 한 사용자 정의 할당자가 필요합니다. –